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());
        
    }
}

実はandroidapiって実はDateUtilsがあったりPair見たいな補助クラスがあったりと、結構便利なものが多いよ。