在Android Spinner中设置值和显示文本

17
我需要帮助在下拉框中设置值和显示文本。 目前,我正在使用数组适配器来填充我的下拉框,例如:
mySpinner.setAdapter(myAdapter);
据我所知,完成此操作后,Spinner 的显示文本和值在同一位置。我可以从 Spinner 获取的另一个属性是项目的位置。
现在,在我的情况下,我想让 Spinner 像在 .NET 中拥有的下拉框一样。
其中包含文本和值。
而文本是显示的,值是在后端。 因此,如果我更改下拉框,则可以使用其选择的文本或值。 但这在 Android 的 Spinner 案例中并没有发生。
例如:
Text Value Cat 10 Mountain 5 Stone 9 Fish 14 River 13 Loin 17
因此,我只显示非生物对象的文本,并且我想要的是当用户将它们选择时,我获取它们的值,例如当选择 Mountain 时,获取的值为 5。
我希望这个示例能让我的问题更清晰一些...
谢谢

如果您没有从持久数据源获取数据,而只是一个静态的显示文本和值数组,则另一个很好的选择是枚举。如果您感兴趣,请告诉我,我会发布一个答案。 - Joshua Pinter
暂时先看这个:https://dev59.com/-mgu5IYBdhLWcg3wZmW8#37266810 - Joshua Pinter
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();
}

如果您有textvalue自定义类,则可以使用以下代码:@Override public String toString() { return getText(); } - Muhammad Atif Agha

14

步骤#1:为文本和值对创建数据模型

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

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

如果您在 Spinner 中仅想显示每个元素的文本表示,则可以跳过自定义 Adapter - 只需使用 ArrayAdapter<YourModelClass>并在YourModelClass上重写toString()以返回您想要的任何显示文本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接