スピナー

スピナーは、一連の値から 1 つの値を素早く選択する手段を提供します。スピナーは、デフォルト状態では、現時点で選択されている値を表示します。 スピナーをタップすると、他の選択可能な値すべてを含むプルダウン メニューが表示されるので、ユーザーはその値の中から新たに 1 つの値を選ぶことができます。

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

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

スピナーに選択肢の一覧を設定するには、ActivityFragment のソースコードで 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 を作成することを可能にしています。 このメソッドの 3 番目の引数は、選ばれた選択肢がスピナー コントロールでどう見えるかを定義するレイアウト リソースです。 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) {
        // 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 または FragmentAdapterView.OnItemSelectedListener インターフェースを実装する場合には(上の例など)、インターフェース インスタンスとして this を渡すことが可能です。