17

我需要帮助来设置值并在微调器中显示文本。按照现在,我正在通过数组适配器填充我的微调器,例如

mySpinner.setAdapter(myAdapter);

据我所知,执行此操作后,显示文本和微调器在同一位置的值是相同的。我可以从微调器获得的另一个属性是项目上的位置。

现在就我而言,我想制作类似于下拉框的微调器,我们在 .NET 中拥有它。

它包含一个文本和值。

其中显示文本并且值位于后端。因此,如果我更改下拉框,我可以使用其选定的文本或值。但它不会发生在 android spinner 案例中。

例如:

文字值
猫 10
山 5
石头 9
鱼 14
河 13
里脊 17

所以从上面的阵列中,我只是显示非活着的对象文本,以及我想要的是,当用户选择它们时,我会在那里有价值,即当山山时,我得到5

我希望这个例子能让我的问题更清楚一点......

谢谢

4

2 回答 2

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();
}
于 2010-05-31T16:41:08.360 回答
13

第 1 步:为您的文本和值对创建数据模型

步骤#2:扩展BaseAdapterArrayAdapter环绕您的数据模型,覆盖getView()以返回您想要在其Spinner自身中显示的任何内容

步骤#3:在选择事件上,使用位置在数据模型中找到相应的对象,并查找值

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

于 2010-05-31T11:52:15.883 回答