スピナー

スピナーを使用すると、一連の値から 1 つの値をすばやく選択できます。デフォルトの状態で、スピナーは現在選択されている値を表示します。スピナーをタップすると、他の選択可能な値すべてを含むプルダウン メニューが表示され、ユーザーは新しい値を選択できます。

レイアウトにスピナーを追加するには、Spinner オブジェクトを使用します。これは通常、XML レイアウトで <Spinner> 要素を使用して行います。次に例を示します。

<Spinner
    android:id="@+id/planets_spinner"
    android:layout_width="match_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 のインスタンスを使用してスピナーに配列を提供できます。

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 を作成できます。このメソッドの 3 つ目の引数は、選択した選択肢がスピナー コントロールでどのように表示されるかを定義するレイアウト リソースです。simple_spinner_item レイアウトはプラットフォームによって提供されます。スピナーの外観に独自のレイアウトを定義する場合を除き、デフォルト レイアウトとして使用する必要があります。

次に setDropDownViewResource(int) を呼び出して、アダプターがスピナー選択リストに表示するために使用するレイアウトを指定します(simple_spinner_dropdown_item はプラットフォームで定義される別の標準レイアウトです)。

setAdapter() を呼び出して、Spinner にアダプターを適用します。

ユーザー選択への応答

ユーザーがプルダウンで項目を選択すると、Spinner オブジェクトが on-item-selected イベントを受け取ります。

スピナーの選択イベント ハンドラを定義するには、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);

Activity または FragmentAdapterView.OnItemSelectedListener インターフェースを実装する場合(上記の例など)、this をインターフェース インスタンスとして渡すことができます。