将自定义对象设置为 Spinner 并显示特定属性

LSi*_*ikh 3 android adapter spinner

我有一个微调器,我需要用字符串值填充它,但我还需要保存该字符串的 id。

我有这个结构要在微调器中显示

public class Item{

    private Integer id;

    private Double name;
}
Run Code Online (Sandbox Code Playgroud)

我想在微调器中显示名称,但是当我选择一个项目并按下按钮时,我想要该名称的 ID。

字符串不会重复,所以我可以做一个Map<Integer, String>来管理这个,但我想知道是否存在更好的解决方案,比如自定义适配器或微调器的布局或为微调器设置一种数据源对象并显示对象的特定属性。

这是我的 spinner_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/spinnerTarget"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textSize="12pt"
    android:gravity="center"/>
Run Code Online (Sandbox Code Playgroud)

Nav*_*hna 6

像这样改变你的模型类

public class Item{

private String id;
private String name;

 public String getId() {
    return id;
}

public String getName() {
    return name;
}

public String toString() {
return getName();
}

}
Run Code Online (Sandbox Code Playgroud)

像这样设置微调适配器

ArrayAdapter<Item> adapter =
                        new ArrayAdapter<Item>(getActivity(), android.R.layout.simple_spinner_dropdown_item, dataNew);
spinner.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)

现在要获取所选项目的 id,

 spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
          //get id of the selected item using position 'i'
        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {

        }
    });
Run Code Online (Sandbox Code Playgroud)