ListView中item及其子控件无法响应点击事件
原因
存在Button、ImageButton、CheckBox(一般是是Button或者CheckBox及其子类控件)等获取焦点能力比较强的控件把item的焦点给霸占了,导致item无法获取焦点来动态分配给其他控件,从而无法触发点击事件;
最直接的解决方法
在item的xml布局文件中的根节点上设置
descendantFocusability=”blocksDescendants”;
- beforeDescendants:viewgroup会优先其子类控件而获取到焦点;
- afterDescendants: viewgroup只有当其子类控件不需要获取焦点时才获取焦点;
- blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点,子控件就无法霸占共享的item的焦点;
其他解决办法
在Button或者CheckBox及其子类控件这些个比较霸道的占有焦点的控件中设置属性focusable=”false”;
不让它们主动霸占焦点,需要的时候item给他分配;