標籤:
Spinner
Spinner是一個下拉式清單,通常用於選擇一系列可選擇的清單項目,它可以使用適配器,也可以直接設定數組源。
1、直接設定數組源
在res/values/strings.xml中設定數組源
1 <string-array name="selector">2 <item >學生證</item>3 <item >結婚證</item>4 <item >軍官證</item>5 <item >黨員證</item>6 </string-array>
然後在MainActivity找到spinner,然後設定預設選擇項
1 import android.app.Activity; 2 import android.os.Bundle; 3 import android.widget.Spinner; 4 5 public class MainActivity extends Activity { 6 /** 7 * Spinner列表選擇框 8 * 是一個下拉式清單,通常用於選擇一系列可選擇的清單項目,它可以使用適配器,也可以直接設定數組源 9 */10 @Override11 protected void onCreate(Bundle savedInstanceState) {12 super.onCreate(savedInstanceState);13 setContentView(R.layout.activity_main);14 15 Spinner spinner = (Spinner) findViewById(R.id.spinner);16 17 spinner.setSelection(2, true);//從0開始18 }19 20 21 }
這裡的setSelection(int position, boolean animate)和setSelection(int position) 實現機制有較大區別,當調用前者時重新layout,立即觸發onItemSelected函數,作用相當於用手直接點擊。而後者設定了下次選擇位置:setNextSelectedPositionInt(position); 然後請求Layout;,而requestLayout並非立即執行,僅僅是一個schedule。但是後者可能在重新裝載資料然後Layout時丟失了某些狀態。
運行效果
2、使用適配器,並設定監聽
public class MainActivity extends Activity { /** * Spinner列表選擇框 * 是一個下拉式清單,通常用於選擇一系列可選擇的清單項目,它可以使用適配器,也可以直接設定數組源 */ //資料來源 String[] data = {"媽媽","爸爸","爺爺","奶奶","外公","外婆"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Spinner spinner = (Spinner) findViewById(R.id.spinner); //直接使用數組源 //spinner.setSelection(2,true); //使用適配器 ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, data); spinner.setAdapter(adapter); //下拉式清單選擇框,設定監聽 spinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { //直接數組源 //String name = getResources().getStringArray(R.array.selector)[position]; //Toast.makeText(getBaseContext(), name, Toast.LENGTH_SHORT).show(); //適配器的時候 String name = data[position]; //實質上如果是MainActivity.this也可以,但是如果改成this,會報錯。因為這個用了匿名內部類 Toast.makeText(getBaseContext(), name, Toast.LENGTH_SHORT).show(); } @Override public void onNothingSelected(AdapterView<?> parent) { //當沒有任何選擇時調用從沒觸發過 Log.e("TAG", "從沒觸發過"); } }); } }
運行效果
Android Spinner列表選擇框