##SpinnerにKey-Valueを設定する(XMLでKey, Valueの値を設定)
これがデファクトスタンダードなのかは不明。(一応これで正常に動作してます)
もっと良い方法があったら(あるはず)教えて下さい!
####アダプターを用意
KeyValuePairAdapter.java
/**
* SpinnerにKey-Valueを設定するためのアダプタークラス
*
* @author helmos
*/
public class KeyValuePairAdapter extends ArrayAdapter<Pair<String, String>> {
/**
* コンストラクタ
*
* @param context
* スピナーを利用するアクティビティ
* @param resourceId
* スピナー表示レイアウトのリソースID
* @param list
* ドロップダウンリストに設定する配列
*/
public KeyValuePairAdapter(Context context,
int resourceId,
ArrayList<Pair<String, String>> list) {
super(context, resourceId, list);
}
// スピナー表示用
@Override
public View getView(int pos, View convertView, ViewGroup parent) {
TextView textView = (TextView) super.getView(pos, convertView, parent);
textView.setText(getItem(pos).second);
return textView;
}
// スピナードロップダウン表示用
@Override
public View getDropDownView(int pos, View convertView, ViewGroup parent) {
TextView textView = (TextView) super.getDropDownView(pos,
convertView,
parent);
textView.setText(getItem(pos).second);
return textView;
}
}
####アクティビティ側
Activity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
/*
省略
*/
// スピナー用のデータを取得
ArrayList<Pair<String, String>> sortItemList = new ArrayList<Pair<String, String>>();
Resources resources = getResources();
TypedArray sortItemArray = resources.obtainTypedArray(R.array.sort_spinner_data);
int arrayLength = sortItemArray.length();
for (int i = 0; i < arrayLength; i++) {
int id = sortItemArray.getResourceId(i, -1);
if (id != -1) {
String[] item = resources.getStringArray(id);
sortItemList.add(new Pair<String, String>(item[0], item[1]));
}
}
sortItemArray.recycle();
// スピナーにアダプターを設定
mSortSpinnerAdapter = new KeyValuePairAdapter(this,
android.R.layout.simple_spinner_item,
sortItemList);
mSortSpinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mSpinner.setAdapter(mSortSpinnerAdapter);
}
####設定するKeyとValueの値
arrays.xml
<resources>
<string-array name="sort_spinner_item1">
<item name="key">hoge</item>
<item name="value">value1</item>
</string-array>
<string-array name="sort_spinner_item2">
<item name="key">fuga</item>
<item name="value">value2</item>
</string-array>
<string-array name="sort_spinner_item3">
<item name="key">foo</item>
<item name="value">value3</item>
</string-array>
<array name="sort_spinner_data">
<item>@array/sort_spinner_item1</item>
<item>@array/sort_spinner_item2</item>
<item>@array/sort_spinner_item3</item>
</array>
</resources>
(表示だけならここまで)
####補足
選んでるやつのKeyを取得
→AdapterのgetItem(int position)
を使う
Activity.java
private void hoge {
/* 省略 */
// 選択されているPairアイテムを取得
Pair<String, String> selectedItem = mSortSpinnerAdapter.getItem(mSpinner.getSelectedItemPosition());
// key
String key = selectedItem.first;
// value
String val = selectedItem.second;
/* 省略 */
}