在gridview或者listView中,我们经常会给他们的item中的控件也添加事件监听。就会发生item的点击事件和item中的控件点击事件冲突,只能实现一个的情况。
这种情况,解释一下可能的原因。
有可能是item中子控件的优先级会高于父控件,所以焦点优先给予子控件,导致父控件获取不到焦点。那么针对的解决办法可以有如下两方面的思路:
1.给父控件的获取焦点优先级提高一下呗:
解释一下descendantFocusability的属性有三种:
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
而我们需要用到的就是覆盖子类控件直接获取焦点。这个大家理解尝试。
在我们的item的跟布局中加入下面这一行代码就解决我们的焦点冲突问题。
android:descendantFocusability="blocksDescendants"
2.将子控件的focusable修改一下:
如下,在我们的需要获取焦点的子控件加如下代码:
android:focusable="false"
这样,我们的item和item中的控件的事件就不冲突啦。