Spinners(下拉列表)

下拉列表

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作爲接口事例傳遞使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章