我有一个字符串数组我正在填充一个Spinner对象。但是,我想在Spinner的每个元素上附加一个ID,所以当用户选择一个项目时,我会将其ID用于保存到其他一些数据。我怎么能这样做?
答案 0 :(得分:36)
创建一个StringWithTag类,并使用代替列表中的字符串名称,如下所示: -
public class StringWithTag {
public String string;
public Object tag;
public StringWithTag(String stringPart, Object tagPart) {
string = stringPart;
tag = tagPart;
}
@Override
public String toString() {
return string;
}
}
在向spinner部分添加项目中: -
List<StringWithTag> list = new ArrayList<StringWithTag>();
list.add(new StringWithTag("Oldman", "12345"));
list.add(new StringWithTag("Umpire", "987654"));
list.add(new StringWithTag("Squad", "ABCDEE"));
ArrayAdapter<StringWithTag> adap = new ArrayAdapter<StringWithTag> (this, android.R.layout.simple_spinner_item, list);
....
....
听众中的: -
public void onItemSelected(AdapterView<?> parant, View v, int pos, long id) {
StringWithTag s = (StringWithTag) parant.getItemAtPosition(pos);
Object tag = s.tag;
}
瞧! }
答案 1 :(得分:19)
id是什么意思?您可以使用ArrayAdapter填充Spinner。选择项目时,只需从适配器获取元素并保存所需的数据。
Spinner spinner = (Spinner) findViewById(R.id.spinner);
ArrayAdapter<MyObject> adapter = ... // initialize the adapter
adapter.setDropDownViewResource(android.R.layout.some_view);
spinner.setAdapter(adapter);
以及何时选择项目
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
MyObject selected = parent.getItemAtPosition(pos);
// save any data relevant with selected item
}
如果要在db中存储数据,可以使用CursorAdapter并在onItemSelected中从光标中获取所选的项ID。
答案 2 :(得分:0)
我不认为您可以将任意ID附加到文本数组资源的元素,如果这是您正在使用的。
我认为附加这样一个ID的最简单方法是硬编码(如果你使用静态文本资源)或动态构建(如果你在运行时获得字符串)一个映射(String position in array) - &gt;(主键)。
编辑:另一方面,Mojo Risin有一个观点 - 您应该检查CursorAdapter API是否已经满足您的需求。
答案 3 :(得分:0)
您可以在 SpinnerAdapter 中充气 spinnerLayout 时为每一行设置标记:
spinnerView = inflater.inflate(spinnerLayout, parent, false);
spinnerView.setTag("Your Tag");
然后你可以获得标签:
yourSpinner.getSelectedView().getTag();
答案 4 :(得分:-1)
我认为最好的解决方案是再添加一个微调器并用ids填充它,但要使它的可见性消失