正常情况下,父RecyclerView嵌套子RecyclerView的话,点击子RecyclerView只会响应它自己的点击事件,就算你没有在BaseQuickAdapter里面设置它的点击事件,它也会拦截掉,不响应父列表的点击事件。
大家的第一反应就是处理事件分发,让子列表不处理交给外部列表处理点击事件,又或者写一个接口传递给你的父adapter,让它再传给子adapter。都是比较麻烦的处理方式。
这里提供另一种思路:点击内部列表调用外部点击事件的方法:
@Override
protected void convert(BaseViewHolder helper, OrderListBean.RecordsBean item) {
RecyclerView recyclerView = helper.getView(R.id.recycler_child);
ListChildAdapter adapter = new ListChildAdapter(item.getChildList());
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(mContext));
recyclerView.setNestedScrollingEnabled(false);
//这里设置点击事件,调用当前(外部)adapter的点击事件的方法,响应到外部
adapter.setOnItemClickListener((adapter1, view, position) -> {
setOnItemClick(helper.getView(helper.getLayoutPosition()),helper.getLayoutPosition());
});
}
如果还有什么更好解决方案比如可以一行代码直接设置内部recycler或者adapter直接响应上层点击事件欢迎留言一起探讨交流。
标题2021-03-03补充:
确实是有一行代码可以做到这种点击直接响应外层recycler的方法喔:
//内层recyclerView设置属性:让外层recyclerView能接收到点击事件
recyclerView.setLayoutFrozen(true);