RecyclerView嵌套Recyclerview出现的问题记录以及解决

1.滑动冲突
RV嵌套RV导致滑动冲突,内部滑动失效。
解决方法:滑动冲突解决
2.父RV与子RV竞争焦点导致展开某一项时向上展开。
解决方法:在xml中父RV添加android:descendantFocusability="blocksDescendants"禁止子RV竞争焦点即可。
3.父RV调用notifyDataSetChanged()时,子RV的数据会跳回顶部第一条数据,这是因为RV的item在竞争焦点导致,如果是单层RV的话,可以在itm的父布局添加android:descendantFocusability="blocksDescendants"禁止焦点,但是嵌套RV时就会失效,这是就要用另外一种办法,记录RV上次滑到的位置,刷新数据后回到原位置即可。

  LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext);
            holder.bigFileRecyclerView.setLayoutManager(linearLayoutManager);
            holder.bigFileRecyclerView.setAdapter(bigFileItemAdapter);


            holder.bigFileRecyclerView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
                @Override
                public void onScrollChange(View view, int i, int i1, int i2, int i3) {
                    if (linearLayoutManager instanceof LinearLayoutManager) {
                        View firstView = linearLayoutManager.getChildAt(0);//第一个可见的item
                        offset = firstView.getTop();//第一个可见item的偏移量
                        lastPosition = linearLayoutManager.getPosition(firstView);
                    }
                }
            });
            Log.d(TAG, "findLastCompletelyVisibleItemPosition = " + lastPosition + "offser = " + offset);

            linearLayoutManager.scrollToPositionWithOffset(lastPosition, offset);//跳到该位置

这样就可以解决跳到顶部的原因了。这个方法也可以用到需要记录位置的地方。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值