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

时间:2018-02-22 15:42:24

标签: android spinner adapter

我有一个微调器,我需要填充String值,但我还需要保存该String的id。

我有这个结构在旋转器中显示

public class Item{

    private Integer id;

    private Double name;
}

我想在微调器中显示名称但是当我选择一个项目并按下一个按钮时,我希望得到该名称的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"/>

2 个答案:

答案 0 :(得分:4)

像这样更改您的模型类

public class Item{

private String id;
private String name;

 public String getId() {
    return id;
}

public String getName() {
    return name;
}

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

}

像这样设置微调器适配器

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

现在获取所选项目的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) {

        }
    });

答案 1 :(得分:2)

在您的班级项目中设置toString()覆盖: 实施例

@Override
public String toString() {
    return getName(); // You can add anything else like maybe getDrinkType()
}

<强>布局/ layout_spinner:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="16sp"
    android:textColor="#000000"
    android:textAlignment="center"
    />

在您的java类中:

public void loadSpin(List<Item> itemList)
{
     ArrayAdapter<Item> adapter =
                new ArrayAdapter<Item>(YourActivity.this, R.layout.layout_spinner, itemList);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        yourSpinner.setSelection(0);
        yourSpinner.setAdapter(adapter);
}