본문 바로가기
IT

ANDROID スピナー

by 엘리후 2021. 7. 4.

スピナー

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

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

<Spinner

android:id="@+id/planets_spinner"

android:layout_width="fill_parent"

android:layout_height="wrap_content" />

スピナーに選択肢の一覧を設定するには、ActivityFragment のソースコードで SpinnerAdapter を指定する必要があります。

主なクラスは次のとおりです。

Spinner

SpinnerAdapter

AdapterView.OnItemSelectedListener

スピナーにユーザーの選択肢を設定する


スピナーに使用する選択肢は、どのようなソースからでも取得できますが、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 を使用し、スピナーに配列を渡すことができます。

KOTLINJAVA
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
}

createFromResource() メソッドは、文字列配列から ArrayAdapter を作成することを可能にしています。このメソッドの 3 番目の引数は、選ばれた選択肢がスピナー コントロールでどう見えるかを定義するレイアウト リソースです。simple_spinner_item レイアウトはプラットフォームによって提供され、スピナーの外観に独自のレイアウトを定義する場合を除いては、デフォルトのレイアウトとして使用する必要があります。

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

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

ユーザーの選択に応答する


ユーザーがプルダウンからアイテムを選択すると、Spinner オブジェクトが on-item-selected イベントを取得します。

スピナー用の選択のイベント ハンドラを定義するには、AdapterView.OnItemSelectedListener インターフェースと、対応する onItemSelected() コールバック メソッドを実装します。たとえば以下では、Activity にこのインターフェースを実装しています。

KOTLINJAVA
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
}
}

AdapterView.OnItemSelectedListener には、コールバック メソッド onItemSelected()onNothingSelected() が必要です。

次に、setOnItemSelectedListener() を呼び出して、インターフェースの実装を指定する必要があります。

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

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

댓글