1. 程式人生 > >Android官方文件—User Interface(Input Controls)(Spinners)

Android官方文件—User Interface(Input Controls)(Spinners)

下拉列表

下拉列表提供了從集合中選擇一個值的快速方法。在預設狀態下,微調器顯示其當前選定的值。觸控微調器會顯示一個包含所有其他可用值的下拉選單,使用者可以從中選擇一個新值。

您可以使用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。

例如,如果預先確定了微調器的可用選項,則可以為它們提供在字串資原始檔中定義的字串陣列:

<?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);
// Create an ArrayAdapter using the string array and a default spinner layout
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
        R.array.planets_array, android.R.layout.simple_spinner_item);
// Specify the layout to use when the list of choices appears
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// Apply the adapter to the spinner
spinner.setAdapter(adapter);

createFromResource()方法允許您從字串陣列建立ArrayAdapter。此方法的第三個引數是佈局資源,用於定義所選選項在微調控制元件中的顯示方式。 simple_spinner_item佈局由平臺提供,是您應該使用的預設佈局,除非您想為微調器的外觀定義自己的佈局。

然後,您應該呼叫setDropDownViewResource(int)來指定介面卡應該用於顯示微調器選項列表的佈局(simple_spinner_dropdown_item是平臺定義的另一個標準佈局)。

呼叫setAdapter()將介面卡應用於Spinner。

響應使用者選擇


當用戶從下拉列表中選擇一個專案時,Spinner物件將接收一個專案選擇的事件。

要為微調器定義選擇事件處理程式,請實現AdapterView.OnItemSelectedListener介面和相應的onItemSelected()回撥方法。例如,這是Activity中介面的實現:

public class SpinnerActivity extends Activity implements OnItemSelectedListener {
    ...

    public void onItemSelected(AdapterView<?> parent, View view,
            int pos, long id) {
        // An item was selected. You can retrieve the selected item using
        // parent.getItemAtPosition(pos)
    }

    public void onNothingSelected(AdapterView<?> parent) {
        // Another interface callback
    }
}

AdapterView.OnItemSelectedListener需要onItemSelected()和onNothingSelected()回撥方法。

然後,您需要通過呼叫setOnItemSelectedListener()來指定介面實現:

Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setOnItemSelectedListener(this);

如果使用Activity或Fragment實現AdapterView.OnItemSelectedListener介面(例如上面的示例中),則可以將其作為介面例項傳遞。