如何为Material Exposed Dropdown配置自定义适配器并解决相关异常
问题修复方案
两个异常分别由自定义Adapter实现缺失、错误覆盖控件默认监听逻辑导致,按以下步骤修改即可:
1. 解决选中后显示内存地址字符串问题
ArrayAdapter默认会调用数据项的toString()方法获取输入框展示文本,自定义AdapterItem未重写该方法时,默认返回类名@内存哈希值格式的字符串,就会出现类似@71232的显示内容。
另外你实现的initView方法从未被系统调用——你没有重写Adapter必需的getView()、getDropDownView()方法,下拉列表初始展示正常只是因为构造函数传入了布局和文本id,走了ArrayAdapter默认的下拉项文本填充逻辑,输入框内的文本填充仍然走默认的toString()逻辑。
修复操作:
- 为
AdapterItem类重写toString()方法,返回需要展示的文本:
public static class AdapterItem { public String text; public int image; // 省略你原有成员、构造方法等代码 @NonNull @Override public String toString() { return text; } }
- 重写Adapter的两个视图方法,区分输入框展示态和下拉列表态:输入框内只展示纯文本,下拉项才加载图片+文本的布局,把你写的视图初始化逻辑放到下拉项方法中:
public class CustomArrayAdapter extends ArrayAdapter<CustomArrayAdapter.AdapterItem> { public CustomArrayAdapter(Context context, ArrayList<AdapterItem> itemList) { super(context, R.layout.item_dropdown, R.id.tv_text, itemList); } // 输入框内的展示视图,走默认纯文本逻辑即可,不需要加载图片 @NonNull @Override public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { return super.getView(position, convertView, parent); } // 下拉列表项视图,加载图片+文本布局 @Override public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_dropdown, parent, false); } TextView tvText = convertView.findViewById(R.id.tv_text); ImageView ivImage = convertView.findViewById(R.id.iv_image); AdapterItem currentItem = getItem(position); if (currentItem != null) { tvText.setText(currentItem.text); ivImage.setImageDrawable(getContext().getDrawable(currentItem.image)); } return convertView; } }
2. 解决第二次点击下拉框不弹出问题
该问题是因为你自定义了setOnItemClickListener,手动调用setText()破坏了AutoCompleteTextView内部的选中状态、下拉弹出/关闭的判断逻辑。
直接删除你写的setOnItemClickListener全部代码即可,控件内置的默认监听器会自动完成选中项文本填充、下拉关闭、状态重置的全流程,不需要手动设置文本。
适配器绑定逻辑
原有绑定逻辑不需要修改,保持如下写法即可:
CustomArrayAdapter customArrayAdapter = new CustomArrayAdapter(getContext(), list); autoCompleteTextView.setAdapter(customArrayAdapter);
内容的提问来源于stack exchange,提问作者Pujan Shrestha
相关产品推荐
相关产品推荐

