Android Spinner下拉列表显示错误值问题求助
Spinner下拉显示错误值的解决方法
你遇到的问题根源在于ArrayAdapter默认会调用数据源对象的toString()方法生成显示文本,而你的PackLstInf类没有重写该方法,导致下拉列表显示的是对象的默认内存标识(比如com.yourpackage.PackLstInf@xxxx),而非你期望的内容。
快速解决:重写PackLstInf的toString()方法
直接在PackLstInf类中添加toString()方法,返回你想要在Spinner中展示的字段即可:
public class PackLstInf { private String countryCode; // 对应你代码中的"USA"这类值 private int value; // 对应人口数值 // 构造方法 public PackLstInf(String countryCode, int value) { this.countryCode = countryCode; this.value = value; } // 重写toString,返回要显示的文本 @Override public String toString() { return countryCode; // 如果想同时显示数值,可改成 countryCode + " (" + value + ")" } // 按需添加getter/setter方法 public String getCountryCode() { return countryCode; } public int getValue() { return value; } }
修改后,原有的Adapter绑定代码无需改动,ArrayAdapter会自动使用重写后的toString()生成下拉选项文本。
进阶:自定义Adapter实现复杂布局
如果需要在下拉列表中展示多段内容(比如同时显示国家名称和人口),可以自定义Adapter:
public class PackListAdapter extends ArrayAdapter<PackLstInf> { private Context mContext; private ArrayList<PackLstInf> mData; public PackListAdapter(Context context, ArrayList<PackLstInf> data) { super(context, android.R.layout.simple_spinner_item, data); mContext = context; mData = data; setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); } @Override public View getView(int position, View convertView, ViewGroup parent) { return createItemView(position, convertView, parent); } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { return createItemView(position, convertView, parent); } private View createItemView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(mContext).inflate(android.R.layout.simple_list_item_2, parent, false); } PackLstInf item = mData.get(position); TextView tvName = convertView.findViewById(android.R.id.text1); TextView tvValue = convertView.findViewById(android.R.id.text2); tvName.setText(item.getCountryCode()); tvValue.setText("数值: " + item.getValue()); return convertView; } }
然后替换原Adapter的初始化代码:
myPack = loadPackData(); PackListAdapter myAdapter = new PackListAdapter(activity, myPack); spPack.setAdapter(myAdapter);
内容的提问来源于stack exchange,提问作者tsrahul81
相关产品推荐
相关产品推荐

