今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

SpinnerでString型以外のオブジェクトを表示する

Spinnerで扱うオブジェクトは、String型とは限らないんだけど、ぐぐってヒットするサンプルはどれもString型ばかり。
ってことで、String型以外のオブジェクトを扱うための実装方法を調べてみた。
layoutは普通通りに書けばいいみたい。



    


とりあえず、String型を扱う場合の実装を書いておく。ぐぐればたくさん見つかるけど。

public class SpinnerActivity extends Activity {
    private Spinner spinner;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContextView(R.layout.spinner);
        spinner = (Spinner)findViewById(R.id.spinner);
        ArryAdapter adaper = new ArrayAdapter(this, android.R.layout.simple_spinner_item);
        adapter.add("abc");
        adapter.add("ABC");
        adapter.add("123");
        spinner.setAdapter(adapter);
    }
}

String型以外のオブジェクトを扱ってみる。たとえばよくあるパターンでPersonとか。

public class Person {
    private String name;
    private String twitter;
    public Person(String name, String twitter) {
        this.name = name;
        this.twitter = tiwtter;
    }
    public String getName() {
        return name;
    }
    public String getTwitter() {
        return twitter;
    }
}

単純に置き換えてみると、Person#toString()の内容がSpinnerに表示されてしまう。

public class SpinnerActivity extends Activity {
    private Spinner spinner;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContextView(R.layout.spinner);
        spinner = (Spinner)findViewById(R.id.spinner);
        ArryAdapter adaper = new ArrayAdapter(this, android.R.layout.simple_spinner_item);
        adapter.add(new Person("きしだなおき", "kis"));
        adapter.add(new Person("たかふー", "imai78"));
        adapter.add(new Person("さわださとし", "satoshis"));
        spinner.setAdapter(adapter);
    }
}

それなりに表示させるために、PersonAdapterを用意する。

public class PersonAdapter extends ArrayAdapter {
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        TextView v = (TextView)super.getView(position, convertView, parent);
        Person p = getItem(position);
        v.setText(p.getTwitter() + "/" + p.getName());
        return v;
    }
    @Override
    public Vew getDropDownView(int position, View convertView, ViewGroup parent) {
        TextView v = (TextView)super.getDropDownView(position, convertView, parent);
        Person p = getItem(position);
        v.setText(p.getTwitter() + "/" + p.getName());
        return v;
    }
}

めんどいので、スクリーンショットなし。