最近做新项目,我导入了BRVAH做recyclerview的控制,发现官方已经更新到4.0版本了,这里我按照接入文档配置
https://github.com/CymChad/BaseRecyclerViewAdapterHelper/wiki
implementation "io.github.cymchad:BaseRecyclerViewAdapterHelper4:4.1.4"
我在使用setOnItemClickListener 时发现recyclerview的item点击事件时而有效时而无效,也就是说我通过setOnItemClickListener的点击事件时而能触发时而不能触发
我通过点击源码进去看它的实现
可以看到它内部也是监听itemview的点击,那么是不是因为我的itemview(也就是自定义布局的根view)没有收到点击事件,被其子view所处理了呢?
带着这样的猜测,我对我自己的布局进行了处理尝试
左边是修改前的代码,右边是修改后的代码,可以看到我们将子view设置为不可获取焦点,让父view即布局的最顶层viewgroup设置为可以获取焦点,保证子view不会去抢走焦点消费事件,问题就得到解决了
需要注意的是ViewGroup默认是不可以获取焦点的
到这里,问题已经解决了。但是这里还有一点疑问,就是为什么修改前是偶尔失效偶尔有效呢?如果事件被子view消费处理了,那按理说应该都失效的。暂时没想明白,欢迎同学讨论指点