<< Android-Note
Spinnerで選択されたアイテムのIDを取得するには
文字配列リソースからSpinnerのアイテムを作る方法については簡単にSpinnerのアイテムを作る方法で書きました。
文字配列から簡単にスピナーアイテムを作ることができるので便利な方法ですが、1つ問題があります。
それは選択されたアイテムIDを取得することです。
例えば次のような文字配列リソースがあるとします。
<string-array name="animal_list"> <item>@string/mouse</item> <item>@string/cow</item> <item>@string/tiger</item> <item>@string/rabbit</item> <item>@string/dragon</item> </string-array>
この文字配列リソースをレイアウト画面のスピナーのプロパティ画面を開いてEntriesプロパティに配列を追加します。
そしてコード中でSpinnerにリスナーを設定します。
Spinner animalSpinner = (Spinner) findViewById(R.id.animalSpinner); animalSpinner.setOnItemSelectedListener( new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapter, View v, int position, long id) { /// アイテムが選択されたときの処理 } @Override public void onNothingSelected(AdapterView<?> adapter) {} });
これでもスピナーとしては機能しますが、onItemSelectedメソッドで選択されたアイテムのインデックス(position)を知ることはできますがアイテムのIDを調べることができません。
もちろんインデックスで処理してもいいのですが、文字配列リソースでアイテムを追加・挿入などしたときにいちいち書き直さなくてはならなくなります。
その問題を解決するために次のようにコードを書き換えます。
Spinner animalSpinner = (Spinner) findViewById(R.id.animalSpinner); animalSpinner.setOnItemSelectedListener( new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapter, View v, int position, long id) { TypedArray array = getResources().obtainTypedArray( R.array.animal_list); int itemId = array.getResourceId(position, R.string.mouse); switch(itemId){ case R.string.mouse: /// 何か処理 break; case R.string.cow: /// 何か処理 break; /// ... 以下略 } array.recycle(); ///使わなくなったら解放 } @Override public void onNothingSelected(AdapterView<?> adapter) {} });
この例ではTypedArrayを使ってインデックスからアイテムIDを取得しています。
インデックスではなくアイテムIDを取得できるので配列に変更があったとしてもコードを変更せずに済みます。
以上が文字配列から作ったSpinnerのアイテムIDを取得する方法です。では、また!
© Kaz