Key, Valueの値を持ったSpinnerを作る(XMLから読み込む)

##SpinnerにKey-Valueを設定する(XMLでKey, Valueの値を設定)

これがデファクトスタンダードなのかは不明。(一応これで正常に動作してます)
もっと良い方法があったら（あるはず）教えて下さい！


####アダプターを用意

```java: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;
  }

}

```

####アクティビティ側

```java: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の値
```xml: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)`を使う

```java:Activity.java

private void hoge {
  /* 省略 */

  // 選択されているPairアイテムを取得
  Pair<String, String> selectedItem = mSortSpinnerAdapter.getItem(mSpinner.getSelectedItemPosition());
  // key
  String key = selectedItem.first;
  // value
  String val = selectedItem.second;

  /* 省略 */
}
```