2010-05-31 32 views
17

我需要在微调设定值和显示文本的帮助。 按照我现在通过阵列适配器e.g设定值和显示文本中的Android微调

mySpinner.setAdapter(myAdapter); 

并尽量这样做的显示文本和微调在同一位置的值之后,我所知道的是相同的填充我的微调。我可以从微调获得的其他属性是项目上的位置。

现在我的情况下,我想使微调像下拉框,这是我们在.NET。

,其保存的文本和值。

其中当显示文本和值是在后端。 所以如果我改变下拉框中,我既可以使用其选定的文本或值。 但它并没有在android spinner的情况下发生。

例如:

文本值
猫10
山5
石9
鱼14
河13
腰部17

所以从上述阵列我只显示非生命物体的文字,我想的是,当用户选择他们,我到达那里的值,即像在山中选择,我得到5

我希望这例如由我的问题有点更清晰......

thankx

+0

另一个很好的选择,如果你不能从一个持久化数据源得到它和它的显示文本的只是一个静态数组和值是一个枚举。让我知道你是否感兴趣,我会发布一个答案。 – 2016-05-17 03:30:28

+0

现在就来看看tho:http://stackoverflow.com/a/372​​66810/293280 – 2016-05-17 03:58:25

回答

11

第1步:为您的文本和值对

第2步创建一个数据模型:扩展BaseAdapterArrayAdapter环绕你的数据模型,覆盖getView()返回任何你想要在显示Spinner本身

第3步:在评选活动中,使用位置找到您的数据模型中相应的对象,查找值

如果你想要在Spinner显示只是在数据模型中的每个元素的文本表示,可以跳过自定义Adapter - 只需使用ArrayAdapter<YourModelClass>YourModelClass覆盖toString()返回任何显示你想要的文字。

+0

在模型中缺少toString(),感谢您的建议! – cking24343 2014-07-01 16:42:16

15

如果你不想去通过创建自己的适配器类,你可以代替你包裹起来的数据在一些已经回国的toString要在微调器显示的内容。我使用的是类这样的:

public class TextItemPair<T> { 
    private String text; 
    private T item; 
    public TextItemPair(String text, T item) { 
      this.text = text; 
      this.item = item; 
    } 
    public String getText() { 
     return text; 
    } 
    public T getItem() { 
     return item; 
    } 
    @Override 
    public String toString() { 
     return getText(); 
    } 
} 

当微调变化:

public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
    YourTypeHere t = ((TextItemPair<YourTypeHere>)spinner.getItemAtPosition(position)).getItem(); 
} 
+0

只是这是足够的,如果你有textvalue自定义类@Override public String toString(){ return getText(); } – 2015-01-22 22:14:39