我有一个字符串数组,我正在用它来填充Spinner对象。 但是,我想要将ID附加到Spinner的每个元素上,这样当用户选择一个项目时,我就有了它的ID,可以用于保存到其他数据。 我该如何做?
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;
}
}
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;
}
看这里!
你所说的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
}
如果您将数据存储在数据库中,可以使用CursorAdapter,在onItemSelected中从游标中获取所选项目的ID。
安德鲁,好久不见,但写下这些话还是值得的。
在 SpinnerAdapter 中填充 spinnerLayout 时,你可以为每一行设置一个标签:
spinnerView = inflater.inflate(spinnerLayout, parent, false);
spinnerView.setTag("Your Tag");
接着你可以用以下代码获取标签:
yourSpinner.getSelectedView().getTag();
我认为你不能将任意ID附加到文本数组资源的元素上,如果你正在使用它。
我认为最简单的方法是要么硬编码(如果你正在使用静态文本资源),要么动态构建(如果你在运行时获取字符串)从(数组中的字符串位置)->(主键)的映射来附加这样的ID。
编辑:另一方面,Mojo Risin有一点 - 你应该检查看看CursorAdapter API是否已经为你提供了所需的功能。