17

スピナーで値と表示テキストを設定する際に助けが必要です。今のように、配列アダプターでスピナーを設定しています。

mySpinner.setAdapter(myAdapter);

これを行った後、私が知る限り、表示テキストと同じ位置のスピナーの値は同じです。スピナーから取得できるもう 1 つの属性は、アイテムの位置です。

私の場合、.NET にあるドロップダウン ボックスのようなスピナーを作成したいと考えています。

テキストと値を保持します。

テキストが表示され、値がバックエンドにあります。ドロップダウンボックスを変更すると、選択したテキストまたは値を使用できます。しかし、Androidスピナーの場合は発生しません。

例えば:

テキスト値
猫 10
山 5
石 9
魚 14
川 13
ロース 17

上記の配列から、私は生きていないオブジェクトのテキストのみを表示しています。私が望むのは、ユーザーがそれらを選択したときにそこに値を取得することです。つまり、Mountain を選択したときのように 5 を取得します。

この例が私の質問をもう少し明確にしたことを願っています...

ありがとう

4

2 に答える 2

15

独自のアダプター クラスを作成したくない場合は、代わりに、スピナーに表示したいものを返す 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();
}
于 2010-05-31T16:41:08.360 に答える
13

ステップ #1: テキストと値のペアのデータ モデルを作成する

ステップ #2:データ モデルを拡張BaseAdapterまたはラップし、オーバーライドして、それ自体に表示したいものを返すArrayAdaptergetView()Spinner

ステップ #3: 選択イベントで、位置を使用してデータ モデル内の対応するオブジェクトを見つけ、値を検索します。

に表示したいSpinnerのがデータ モデル内の各要素のテキスト表現だけである場合は、カスタムをスキップできます。Adapter使用ArrayAdapter<YourModelClass>してオーバーライドtoString()するだけで、YourModelClass必要な表示テキストを返すことができます。

于 2010-05-31T11:52:15.883 に答える