スピナーで値を設定してテキストを表示するのに助けが必要です。今のように、私はアレイアダプターによってスピナーにデータを入力しています。
mySpinner.setAdapter(myAdapter);
そして、私が知る限り、これを行った後、同じ位置での表示テキストとスピナーの値は同じです。スピナーから取得できるもう1つの属性は、アイテム上の位置です。
私の場合、.NETにあるドロップダウンボックスのようなスピナーを作成したいと思います。
テキストと値を保持します。
ここで、テキストが表示され、値はバックエンドにあります。したがって、ドロップダウンボックスを変更すると、選択したテキストまたは値のいずれかを使用できます。しかし、Androidスピナーケースでは発生しません。
例えば:
テキスト値
Cat 10
山5
ストーン9
魚14
川13
ロース17
したがって、上記の配列からは、非生物オブジェクトのテキストのみを表示しています。ユーザーがそれらを選択すると、そこに値が表示されます。つまり、Mountainが選択されたときに5が表示されます。
この例が私の質問をもう少し明確にしたことを願っています...
ありがとう
ステップ1:テキストと値のペアのデータモデルを作成する
ステップ2:BaseAdapter
またはArrayAdapter
を拡張してデータモデルをラップし、getView()
をオーバーライドして、Spinner
自体に表示したいものを返します。
ステップ3:選択イベントで、位置を使用してデータモデル内の対応するオブジェクトを検索し、値を検索します
Spinner
に表示したいのが、データモデルの各要素のテキスト表現だけである場合は、カスタムAdapter
をスキップできます。_ArrayAdapter<YourModelClass>
_を使用してtoString()
をオーバーライドするだけです。 YourModelClass
で、必要な表示テキストを返します。
独自のアダプタクラスを作成したくない場合は、代わりに、スピナーに表示したいものを返すtoStringを持つものにデータをラップすることができます。私は次のようなクラスを使用します:
public class TextItemPair<T> {
private String text;
private T item;
public TextItemPair(String text, T item) {
this.text = text;
this.item = item;
}
public String getText() {
return text;
}
public T getItem() {
return item;
}
@Override
public String toString() {
return getText();
}
}
そしてスピナーが変わるとき:
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
YourTypeHere t = ((TextItemPair<YourTypeHere>)spinner.getItemAtPosition(position)).getItem();
}