使用BaseQuickAdapter时RecyclerView嵌套RecyclerView点击事件处理最简单的解决方案

正常情况下,父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);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值