Android自定义BaseAdapter的ListView项灰化无法点击按钮如何解决
Android ListView列表项灰化无法点击解决方案
问题根因
你的代码存在3个核心错误导致列表项渲染、点击异常:
- ListView布局中错误使用了
android:entries属性 - 加载列表项布局时错误使用ApplicationContext获取LayoutInflater
- 布局inflate时未正确指定父视图,导致布局参数失效
修复步骤
- 第一步:删除ListView的错误属性
打开ListActivity的XML布局,删除ListView节点中的android:entries="@layout/paletten_item"属性。entries属性仅用于绑定静态字符串数组生成系统默认列表项,你已经使用自定义BaseAdapter渲染列表,该属性完全多余且会干扰自定义布局的渲染逻辑。 - 第二步:修复LayoutInflater的获取方式
修改BaseAdapter中getView()方法的LayoutInflater初始化逻辑,不要用ApplicationContext获取,直接使用传入的Activity上下文:
ApplicationContext没有继承对应Activity的主题配置,会导致控件样式异常、点击状态失效。// 替换原有获取LayoutInflater的代码 LayoutInflater itemInflater = LayoutInflater.from(parent); - 第三步:修复布局inflate逻辑
修改inflate调用参数,指定父视图为ListView,同时设置不主动附加到父视图(该操作由Adapter负责):
之前传null作为根视图会导致列表项根布局的布局参数失效,也可能引发渲染异常。if (convertView == null) { convertView = itemInflater.inflate(R.layout.paletten_item, parent, false); } - 可选优化:删除冗余焦点配置
修复上述问题后如果功能正常,可以删除列表项根布局多余的android:focusable="false"、android:focusableInTouchMode="false"和父布局的android:descendantFocusability="blocksDescendants"配置,避免后续引入其他点击冲突。
内容的提问来源于stack exchange,提问作者MorrisF
相关产品推荐
相关产品推荐

