jrh*_*ath 0 android android-spinner
我正在用微调器构建一个对话框.对话框完成后,它会使用字符串参数调用父活动的方法 - 参数是所选的字符串值.
我目前的方法:
我正在设置spinner的数组适配器,如下所示:
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);
Run Code Online (Sandbox Code Playgroud)
categoryNames是一个字符串数组.对话框完成后,selected categoryName将用作父活动上方法调用的参数.
我真正想做的事情:
我真正想要的是显示一个Category对象列表.该Category班有2个属性- categoryId和categoryName.微调器仍然应该categoryName在下拉视图中显示s,但是当对话框完成后,它应该能够明确地告知Category选择了哪个,并使用categoryId所选类别调用父活动的回调方法.
可以有多个Category相同的categoryName.
问题:如何做到以上?
有几种不同的方式可以做你想要的:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
您的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) {}
});
Run Code Online (Sandbox Code Playgroud)