问题: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()); } });