设置微调器项目的ID

时间:2011-04-26 14:50:17

标签: android spinner

我有一个字符串数组我正在填充一个Spinner对象。但是,我想在Spinner的每个元素上附加一个ID,所以当用户选择一个项目时,我会将其ID用于保存到其他一些数据。我怎么能这样做?

5 个答案:

答案 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填充它,但要使它的可见性消失