iT邦幫忙

2022 iThome 鐵人賽

DAY 6
0
Mobile Development

Android Studio 30天學習紀錄系列 第 6

Android Studio 30天學習紀錄-Day6 下拉式選單(spinner)

  • 分享至 

  • xImage
  •  

今天主要要簡易的使用Spinner這個元件,來進行選擇其中項目並顯示的動作,那麼首先先在string.xml中加入你需要的陣列資料(day_array):

<resources>
    <string name="app_name">spinner</string>
    <string-array name="day_array">
        <item>Monday</item>
        <item>Tuesday</item>
        <item>Wednesday</item>
        <item>Thursday</item>
        <item>Friday</item>
        <item>Saturday</item>
        <item>Sunday</item>
    </string-array>
</resources>

畫面

加入完陣列資料後,接著將spinner元件拉至佈局中。
https://ithelp.ithome.com.tw/upload/images/20220917/20139259reRv0tIaY0.jpg


Spinner

首先Spinner在綁定完元件後,需要建立調配器爾後供spinner做使用,而建立的物件主要是context,陣列以及版面,版面可以用android裡面內建的,也可以自己去客製化一個。

//...綁定元件
ArrayAdapter<CharSequence> arrayAdapter = ArrayAdapter.createFromResource(this,R.array.day_array, android.R.layout.simple_list_item_1);
//spinner調用
spinner.setAdapter(arrayAdapter);

而在設置完資料後,還需要去監聽選擇到的項目,這時候會使用setOnItemSelectedListener這個監聽器,大概會長這個樣子:

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
        //當選擇項目時(取得文字)
        //方法1
        String str = adapterView.getItemAtPosition(i).toString();
        //方法2
        String str = adapterView.getSelectedItem().toString();
    }

    @Override
    public void onNothingSelected(AdapterView<?> adapterView) {
        //較少call到
    }
});

監聽器內主要有這兩個方法,假如進行選擇後,會進入onItemSelected中,接著可以用兩個方法來取得選取到的文字,而onNothingSelected則相對比較少call到,那麼接著來開始設計程式。


程式

public class MainActivity extends AppCompatActivity {
    private Spinner spinner;//下拉式選單
    private TextView txv_selected;//顯示文字
    private Boolean first_state=true;//判斷是否第一次選(因為首次進入會直接跳顯示)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //綁定元件
        spinner = findViewById(R.id.spinner);
        txv_selected=findViewById(R.id.textView);

        ArrayAdapter<CharSequence> arrayAdapter = ArrayAdapter.createFromResource(this,R.array.day_array, android.R.layout.simple_list_item_1);
        //調用
        spinner.setAdapter(arrayAdapter);
        //spinner監聽
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                Log.d("Selected","Yes");
//                String str = adapterView.getItemAtPosition(i).toString();
                String str = adapterView.getSelectedItem().toString();
                if(!first_state&&!str.equals("請選擇")) {
                    txv_selected.setText(str);
                    Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT).show();
                }
                else{
                    first_state=false;
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {
                //較少call到
                Log.d("Selected","No");
            }
        });
    }
}

成果

https://ithelp.ithome.com.tw/upload/images/20220917/20139259LThkT6XYTd.jpg


上一篇
Android Studio 30天學習紀錄-Day5 相簿選取相片
下一篇
Android Studio 30天學習紀錄-Day7 工具欄(Toolbar)+側滑選單
系列文
Android Studio 30天學習紀錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言