下拉列表
Spinners提供了一種能從列表中快速選取某個值的方式。默認狀態下,spinner只顯示當前選擇的值。通過觸碰spinner會顯示一個下拉菜單,裏面含有所有可用的值,用戶可以從中選擇一個新的選項了。
你可以使用 Spinner 對象把下拉列表添加到佈局中。不過一般你應該在XML佈局中使用 <Spinner> 元素添加下拉列表。例如:
<Spinner
android:id="@+id/planets_spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
若要爲下拉列表填充選項列表,那麼你需要在 Activity
或 Fragment
源代碼中指定一個 SpinnerAdapter。
使用用戶選項填充下拉列表
提供給下拉列表的選項可以來自任何資源,但是必須通過 SpinnerAdapter
提供,比如說如果選項來自數組,那麼就用 ArrayAdapter
,再比如說如果選項來自數據庫查詢,那麼就用 CursorAdapter
。
舉例來講,如果下拉列表使用的可用選項是預定義好的,那麼你可以在 string resource file 中把它們定義成字符串數組來供下拉列表使用:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="planets_array">
<item>Mercury</item>
<item>Venus</item>
<item>Earth</item>
<item>Mars</item>
<item>Jupiter</item>
<item>Saturn</item>
<item>Uranus</item>
<item>Neptune</item>
</string-array>
</resources>
你可以在 Activity
或 Fragment
中使用下面的代碼通過 ArrayAdapter 實例把像這樣的數組應用到下拉列表中:
Spinner spinner = (Spinner) findViewById(R.id.spinner);
// 使用字符串數組和默認下拉列表項目的佈局創建ArrayAdapter
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.planets_array, android.R.layout.simple_spinner_item);
// 在選擇列表出現時指定它的佈局
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// 爲下拉列表應用適配器
spinner.setAdapter(adapter);
createFromResource()
方法可以讓你從從字符數組創建 ArrayAdapter
。這個方法的第三個參數是定義下拉列表控件中選擇項的佈局資源。simple_spinner_item
佈局是系統提供的是默認佈局,你應該使用它除非你想要自己定義下拉列表外觀的佈局。
然後你應該調用 setDropDownViewResource(int)
來指定適配器用來顯示下拉列表選項外觀的佈局(simple_spinner_dropdown_item 是平臺定義的另一種標準佈局)。
調用 setAdapter()
來把適配器應用到 Spinner
。
響應用戶選擇
當用戶從下拉列表中選中項目後,Spinner 對象會收到on-item-selected事件。
實現 AdapterView.OnItemSelectedListener 接口和相應的 onItemSelected() 回調方法就可以爲下拉列表定義選中事件處理程序。例如,下面是在 Activity 中實現接口:
public class SpinnerActivity extends Activity implements OnItemSelectedListener {
...
public void onItemSelected(AdapterView<?> parent, View view,
int pos, long id) {
// 選項被選中時。你可以使用parent.getItemAtPosition(pos)獲取被選中的項目
}
public void onNothingSelected(AdapterView<?> parent) {
// 另一個接口回調
}
}
AdapterView.OnItemSelectedListener
需要實現 onItemSelected()
和 onNothingSelected()
回調方法。
然後你需要調用 setOnItemSelectedListener() 指定接口的實現。
Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setOnItemSelectedListener(this);
如果你用 Activity
或 Fragment
(例如上面的事例)實現了 AdapterView.OnItemSelectedListener
接口,那麼你可以把this作爲接口事例傳遞使用。