2011-04-26 100 views
26

我有一个字符串数组,我使用了一个Spinner对象。但是,我想给Spinner的每个元素添加一个ID,所以当用户选择一个项目时,我有它的ID用于保存其他一些数据。我怎样才能做到这一点?Spinner项目的设置ID

+2

我不不明白,微调或阵列位置不足以用作ID? – ferostar 2011-04-26 14:53:46

+3

这是特定于Spinner中项目的ID。它可能是1;它可能是93847549387925187.这是一个数据库主键。 – Andrew 2011-04-26 14:57:46

+1

安德鲁我有同样的问题...如果你得到了回答你的问题比请帮我.... – 2012-03-31 07:38:48

回答

17

你是什么意思的id。您可以使用ArrayAdapter来填充微调器。选择项目时,只需从适配器获取元素并保存所需的数据。

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。

+1

如果我使用一个CursorAdapter,我怎么告诉它“名称”列文本在列表中显示? – Andrew 2011-04-26 15:22:51

0

我不认为你可以附加一个任意的ID到文本数组资源的元素,如果这就是你正在使用的。

我认为最简单的方法来附加这样一个ID将是硬编码(如果您使用的是静态文本资源)或动态构建(如果您在运行时获取字符串)映射从(字符串位置在数组中) - >(主键)。

编辑:另一方面,Mojo Risin有一点 - 你应该检查CursorAdapter API是否已经为你做了什么。

-1

我认为最好的办法是在列表中,像这样添加一个微调,并与IDS填写,但利用它来了

+1

我不这么认为......如果你有你想在微调显示对象的数组,你可以更容易获得选择的ID从这个数组对象的,比另一个微调访问值。 – hendrix 2012-10-26 14:05:16

+0

这不是一个好的解决方案。 – tier1 2014-02-18 03:40:28

32

能见度创建一个类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; 
    } 
} 

在项目添加到微调部分: -

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; 
} 

瞧! }

+0

你在哪里得到StringWithTag? StringWithTag无法解析为类型... – 2014-01-10 06:26:57

+5

@Robert ... err ... StringWithTag是在上面的第一个代码块中创建的。 – mfc 2014-01-23 23:23:27

+2

此解决方案非常完美!这也实现了微调键值,如HTML