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是一个字符串数组。对话框完成后,所选categoryName内容将用作父活动上的方法调用的参数。

我真正想做的是:
我真正想要的是显示一个Category对象列表。该类Category有 2 个属性 -categoryIdcategoryName. 微调器仍应categoryName在下拉视图中显示 s,但是当对话框完成时,它应该能够明确地分辨出哪个被选中,并使用所选类别Category的 调用父活动的回调方法。categoryId

可以有多个Categoryies 具有相同的categoryName.

问:以上怎么办?

4

1 回答 1

10

有几种不同的方法可以做你想做的事:

  • 将额外数据存储在适配器中,例如 SimpleAdapter、SimpleCursorAdapter 或自定义的。
  • 使用自定义对象的集合而不是字符串,只需覆盖该toString()方法即可在 Spinner 中呈现用户可读的字符串。

您似乎想做第二个选项,所以这是一个通用示例:

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 回答