2

Spinner ウィジェットに問題があります。次のコードがあるとします。

    ArrayList<Person> people= new ArrayList<Person>();

    Person = null;
    for(int i = 0; i!= 10; i++) {
        p = new Person();
        s.setID(i);
        s.setName("Name " + i);
        people.add(s);
    }

次のコードを使用して Spinner にバインドしています。

 Spinner spinner1 = (Spinner) findViewById  (R.id.spinner);       
 ArrayAdapter<Person> adapter = new ArrayAdapter<Person>(this, android.R.layout.simple_spinner_item, people);                           
 spinner1.setAdapter(adapter);  

私が望むのは、値 (id) を非表示にしますが、選択すると渡され、名前が表示されるようにすることです。どんな助けでも大歓迎です。

ありがとう。

4

2 に答える 2

11

あなたの質問を正しく理解できたら、名前をスピナーのドロップダウン ビューに表示してほしいと思います。アイテムが選択されたら、ID を返したいと思います。

これには 2 つの方法があります。

最も簡単な方法は、 Person オブジェクトで名前を返す toString() を実装することです。ArrayAdapter は、オブジェクトのテキスト値をドロップダウン ビューにバインドするときに、この値を返します。次に、アクティビティで、Spinner の onItemClickListener を設定し、adapter.getItemAtPosition(position) を呼び出して Person オブジェクトを取得できます。その person オブジェクトから ID を取得できます。

2 番目の方法は、ArrayAdapter を拡張し、getView、getDropDownView、および getItem メソッドを実装することです。getView は、スピナーをクリックしたときに表示される行を作成します。getDropDownView は、スピナーに表示されるビューを作成します。getItem メソッドはオブジェクトを返すか、あなたの場合は指定された位置の ID を返します。getView および getDropDownView メソッドで Person 要素の名前をテキストビューにバインドする必要があります。カスタム ArrayAdapter を作成したら、Spinner の onItemClicKListener を設定し、上で述べたように処理する必要があります。

最初のアプローチは単純ですが、2 番目のアプローチははるかに優れており、特にはるかに複雑なものを開発し始める場合に、アダプターをより細かく制御できます。

それが役立つことを願っています。

于 2010-03-18T04:19:31.070 に答える
2

非常に古い投稿 -- 何か他のものを探しているところに出くわしました -- 間違いに気づきました (おそらく単なる見落とし)

jagsund はほとんど正しいです。彼は getView と GetDropDownView の定義を間違っていました。実際には、彼が言ったこととは逆です。getView はスピナー コントロール内のコンテンツを表示し、getDropDownView はスピナーをクリックしたときに表示されるビュー行を作成します。

したがって、スピナーをクリックしない限り、getDropDownView は呼び出されません。ArrayAdapter をオーバーライドすると、これが表示されます。

于 2011-03-08T21:06:33.807 に答える