スピナーを使用すると、一連の値から 1 つの値をすばやく選択できます。デフォルトの状態では、スピナーに現在選択されている値が表示されます。スピナーをタップするとメニューが表示され、ユーザーが選択できる他のすべての値を確認できます。
Spinner
オブジェクトでスピナーをレイアウトに追加できます。これは通常、XML レイアウトで <Spinner>
要素を使用して行います。次の例はこの処理を示しています。
<Spinner android:id="@+id/planets_spinner" android:layout_width="match_parent" android:layout_height="wrap_content" />
スピナーに選択肢のリストを入力するには、Activity
または Fragment
のソースコードで SpinnerAdapter
を指定します。
マテリアル デザイン コンポーネントを使用している場合、表示されるプルダウン メニューは Spinner
に相当します。
スピナーにユーザーの選択を入力する
スピナーに指定する選択肢は、任意のソースから取得できますが、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.planets_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.planets_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 is 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 is 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.planets_spinner) spinner.onItemSelectedListener = this
Java
Spinner spinner = (Spinner) findViewById(R.id.planets_spinner); spinner.setOnItemSelectedListener(this);
上記の例のように、AdapterView.OnItemSelectedListener
インターフェースを Activity
または Fragment
で実装する場合は、インターフェース インスタンスとして this
を渡すことができます。