輪轉選單

輪轉選單可讓使用者從一組值中輕鬆選取某個值。在預設狀態下,輪轉選單會顯示目前選取的值。輕觸輪轉選單後,畫面上會顯示包含所有其他可用值的下拉式選單,讓使用者選取新的值。

您可以使用 Spinner 物件在版面配置中新增輪轉選單,通常應該要使用 <Spinner> 元素在 XML 版面配置中加入。例如:

<Spinner
    android:id="@+id/planets_spinner"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

如要在輪轉選單中加入選項清單,您必須在 ActivityFragment 原始碼中指定 SpinnerAdapter

主要類別如下:

在輪轉選單中加入使用者選項

您為輪轉選單提供的選項可來自任何來源,但必須透過 ArrayAdapter (如果選項來源為陣列) 或 CursorAdapter (如果選項來自資料庫查詢) 等 SpinnerAdapter 提供。

舉例來說,如果輪轉選單的可用選項已預先決定,您可以透過字串資源檔案中定義的字串陣列提供這些選項:

<?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>

您可以在 ActivityFragment 中使用以下程式碼,透過 ArrayAdapter 的例項為輪轉選單提供如上的陣列:

Kotlin

val spinner: Spinner = findViewById(R.id.spinner)
// Create an ArrayAdapter using the string array and a default spinner layout
ArrayAdapter.createFromResource(
        this,
        R.array.planets_array,
        android.R.layout.simple_spinner_item
).also { adapter ->
    // 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.adapter = adapter
}

Java

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 中實作這個介面:

Kotlin

class SpinnerActivity : Activity(), AdapterView.OnItemSelectedListener {

    override fun onItemSelected(parent: AdapterView<*>, view: View?, pos: Int, id: Long) {
        // An item was selected. You can retrieve the selected item using
        // parent.getItemAtPosition(pos)
    }

    override fun onNothingSelected(parent: AdapterView<*>) {
        // Another interface callback
    }
}

Java

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() 來指定介面實作方式:

Kotlin

val spinner: Spinner = findViewById(R.id.spinner)
spinner.onItemSelectedListener = this

Java

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

如要使用 ActivityFragment 實作 AdapterView.OnItemSelectedListener 介面 (例如上方範例),您可以傳遞 this 做為介面例項。