我正在用微调器构建一个对话框。对话框完成后,它会使用字符串参数调用父活动的方法 - 参数是所选的字符串值。
我目前的做法:
我正在设置微调器的数组适配器,如下所示:
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个属性 - categoryId
和categoryName
。微调器仍然应该在下拉视图中显示categoryName
,但是当对话框完成后,它应该能够明确地告知选择了哪个Category
,并调用父活动的回调方法已选择的类别的categoryId
。
可以有多个Category
具有相同的categoryName
。
问题:如何执行上述操作?
答案 0 :(得分:9)
有几种不同的方法可以做你想做的事情:
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) {}
});