layoutManager.onSaveInstanceState()
layoutManager.onRestoreInstanceState()
RecyclerView嵌套横向滑动的RecyclerView保存滑动状态
1.第一层RecyclerView 的 adapter中:
定义一个map集合 记录LayoutManager状态:
private Map<Integer, Parcelable> saveStateMap;
adapter中重写onViewRecycled()方法 view被滑动消失后调用:
@Override
public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
super.onViewRecycled(holder);
RecyclerView.LayoutManager manager = holder.mRecycleview.getLayoutManager();
if (manager == null) {
return;
}
Parcelable parcelable = manager.onSaveInstanceState();
if (parcelable != null) {
saveStateMap.put(holder.getAdapterPosition(), parcelable);
}
}
重写 addAll()方法,刷新后清除map存放的信息
@Override
public void addAll(List<DataRadioDramaTimeItem> mList) {
super.addAll(mList);
//刷新数据,清除直播甬道的状态信息
saveStateMap.clear();
}
在onBindViewHolder中获取存放的信息并恢复状态:
//获取集合中存储的广播剧layoutManager状态
Parcelable parcelable = saveStateMap.get(holder.getAdapterPosition());
if (parcelable != null) {
//恢复之前的状态
layoutManager.onRestoreInstanceState(parcelable);
}
网友评论