0

私はスピナーでダイアログを構築しています。

私の現在のアプローチ:
スピナーの配列アダプターを次のように設定しています。

ArrayAdapter<String> adapter = 
    new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item,
    categoryNames);     

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mySpinner.setAdapter(adapter);

categoryNames文字列配列です。ダイアログが完了すると、selectedcategoryNameが親アクティビティのメソッド呼び出しのパラメーターとして使用されます。

本当にやりたいこと:実際にやりたいことは、オブジェクト
のリストを表示することです。クラスにはとCategoryの2 つのプロパティがあります。スピナーは引き続きドロップダウン ビューに を表示する必要がありますが、ダイアログが完了すると、どれが選択されたかを明確に判断し、選択されたカテゴリの を使用して親アクティビティのコールバック メソッドを呼び出すことができる必要があります。CategorycategoryIdcategoryNamecategoryNameCategorycategoryId

Category同じ を持つ複数の ieが存在する可能性がありますcategoryName

質問:上記を行うにはどうすればよいですか?

4

1 に答える 1

10

あなたが望むことをするためのいくつかの異なる方法があります:

  • SimpleAdapter、SimpleCursorAdapter、またはカスタム アダプターなどの追加データをアダプターに格納します。
  • Strings の代わりにカスタム オブジェクトの Collection を使用し、toString()メソッドをオーバーライドして、ユーザーが読み取れる Strings を Spinner に表示します。

2 番目のオプションを実行したいようですので、一般的な例を次に示します。

class Category {
    int id;
    String name;

    public Category(int id, String name) {
        this.id = id;
        this.name = name;
    }

    @Override
    public String toString() {
        return name;
    }
}

あなたの ArrayAdapter はほとんど同じです:

List<Category> categories = new ArrayList<Category>();
// Add new items with: categories.add(new Category(0, "Stack");

ArrayAdapter<Category> adapter = 
        new ArrayAdapter<Category>(getActivity(), android.R.layout.simple_spinner_item,
        categories);

...
mySpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        Category category = parent.getItemAtPosition(position);
        Log.v("Example", "Item Selected id: " + category.id + ", name: " + category.name);
    }

    public void onNothingSelected(AdapterView<?> parent) {}
});
于 2012-09-20T00:44:43.773 に答える