Spinnerで選択したアイテムのコードを取得 -おまけ 2つの値を保持するだけのクラス -
Spinnerの例ではMyObjectっていうクラスを作ったよね。
class MyObject { public String key; public String value; public MyObject(String key, String value) { this.key = key; this.value = value; } }
今回に限らず2つの値を保持する箱がほしいことって結構あるよね。
x座標とy座標とか、widthとheightとか。
もちろんPointとかDimensionとかあるけど、今回それらを使うのっておかしい。
というわけで登場するのがPairだよ!
なんとAndroidには2つの値を用意するための箱が最初から用意されています。
というわけでさっきのActivityをPairに変えるとこんなかんじ。
public class SamplePairSpinnerActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Spinner spinner = (Spinner) findViewById(R.id.spinner); KeyValueArrayAdapter<Pair<String, String>> adapter = new KeyValueArrayAdapter<Pair<String, String>> (this , android.R.layout.simple_spinner_item , new Converter<Pair<String, String>>(){ @Override public String toDisplayString(Pair<String, String> t) { return t.second; } }); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); adapter.add(new Pair<String, String>("red", "赤")); adapter.add(new Pair<String, String>("blue", "青")); adapter.add(new Pair<String, String>("green", "緑")); spinner.setAdapter(adapter); } public void handle(View view) { Spinner spinner = (Spinner) findViewById(R.id.spinner); Pair<String, String> obj = (Pair<String, String>) spinner.getSelectedItem(); Log.d("TAG", "first[" + obj.first + "] second [" + obj.second + "]"); Log.d("TAG", obj.toString()); } }
実はandroidのapiって実はDateUtilsがあったりPair見たいな補助クラスがあったりと、結構便利なものが多いよ。