reycleview在滑动时保证子布局recycleview的滑动状态不变

问题:recycleview里嵌套一个横向的recycleview ,内层的recycleivew滑动在某个位置后又滑动外层的recycleivew,当滑动距离较短时,内层recycleive的滑动状态不会改变,但是当recycleview滑动较大距离时,内层recycleview的滑动位置回到了初始位置,这是为啥呢?

答案就是recycleview的viewholder复用机制造成的(文采不好,这里就不多解释了,记录一下我现在能想到的解决方案)

1.在adapter里设置一个map记录各个位置的recycleview的滑动位置,在viewholder中进行位置还原

2.在adapter中用map将内部recycleview的布局管理器进行收集,在activity界面对外层recycleview的滑动进行监听

rv.addOnChildAttachStateChangeListener(new RecyclerView.OnChildAttachStateChangeListener() {
    @Override
    public void onChildViewAttachedToWindow(@NonNull View view) {
      当内部recycleview显示时还原状态用布局管理器的onRestoreInstanceState()
        int index=rv.getChildAdapterPosition(view);
        Log.e("出现",index+"");
        if (hashMap.containsKey(index)) {//是否有这个状态
            //如果包含就恢复
            adapter.hashMap.get(index).onRestoreInstanceState(hashMap.get(index));
        }
    }

    @Override
    public void onChildViewDetachedFromWindow(@NonNull View view) {
      //当内部recycleview被隐藏时保存状态用布局管理器的onsaveinstancestate()
        int index=rv.getChildAdapterPosition(view);
        Log.e("消失",index+"");
        hashMap.put(index,adapter.hashMap.get(index).onSaveInstanceState());
    }
});

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值