自定义AutoCompleteTextView搭配自定义Adapter实现下拉列表时onItemClick事件失效问题
解决AutoCompleteTextView使用ChipGroup后onItemClick不触发的问题
这个问题我之前也碰到过,核心原因就是Chip组件默认是可点击且获取焦点的,它会拦截掉点击事件,导致事件无法传递到AutoCompleteTextView的onItemClick回调里。下面给你几个可行的解决方案:
方案1:直接禁用Chip的点击与焦点特性
在你的Chip布局(或者代码创建Chip时),添加以下属性,让Chip不再拦截点击事件:
<com.google.android.material.chip.Chip android:id="@+id/item_chip" ... android:clickable="false" android:focusable="false" android:focusableInTouchMode="false" />
如果是通过代码动态创建Chip,就这么设置:
Chip chip = new Chip(context); chip.setClickable(false); chip.setFocusable(false); chip.setFocusableInTouchMode(false); // 其他属性设置...
这样设置后,点击事件就会顺利传递到AutoCompleteTextView的item点击回调里了。
方案2:保留Chip点击效果,手动触发item选中逻辑
如果你希望Chip本身有点击反馈,又不想丢失AutoCompleteTextView的选中逻辑,可以给Chip单独设置点击监听器,在回调里手动完成选中操作:
@Override public View getView(int position, View convertView, ViewGroup parent) { View view = inflater.inflate(R.layout.item_chip_group, parent, false); ChipGroup chipGroup = view.findViewById(R.id.chip_group); // 填充Chip逻辑... Chip chip = ...; chip.setOnClickListener(v -> { // 手动将选中内容填充到AutoCompleteTextView autoCompleteTextView.setText(getItem(position)); // 关闭下拉弹窗 autoCompleteTextView.dismissDropDown(); // 如果需要触发原来的onItemClick逻辑,可以手动调用 if (onItemClickListener != null) { onItemClickListener.onItemClick(null, view, position, getItemId(position)); } }); return view; }
这种方式既能保留Chip的交互反馈,又能保证AutoCompleteTextView的原有功能正常工作。
额外注意:检查ChipGroup的属性
有时候ChipGroup的descendantFocusability属性也可能影响事件传递,确保它没有设置成blocksDescendants(这个属性会阻止子View获取焦点),如果有需要可以设置为beforeDescendants:
<com.google.android.material.chip.ChipGroup android:id="@+id/chip_group" ... android:descendantFocusability="beforeDescendants" />
内容的提问来源于stack exchange,提问作者Lorenzo Benevento
相关产品推荐
相关产品推荐

