如何使用RecyclerView.State保存RecyclerView的滚动位置?

编程入门 行业动态 更新时间:2024-10-17 23:28:13
本文介绍了如何使用RecyclerView.State保存RecyclerView的滚动位置?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我对Android的 RecyclerView.State 有疑问.

I have a question about Android's RecyclerView.State.

我正在使用RecyclerView,如何使用RecyclerView.State并将其与RecyclerView.State绑定?

I am using a RecyclerView, how could I use and bind it with RecyclerView.State?

我的目的是保存RecyclerView的滚动位置.

推荐答案

您打算如何使用RecyclerView.State保存上次保存的位置?

How do you plan to save last saved position with RecyclerView.State?

您始终可以依靠良好的保存状态.扩展RecyclerView并覆盖onSaveInstanceState()和onRestoreInstanceState():

You can always rely on ol' good save state. Extend RecyclerView and override onSaveInstanceState() and onRestoreInstanceState():

@Override protected Parcelable onSaveInstanceState() { Parcelable superState = super.onSaveInstanceState(); LayoutManager layoutManager = getLayoutManager(); if(layoutManager != null && layoutManager instanceof LinearLayoutManager){ mScrollPosition = ((LinearLayoutManager) layoutManager).findFirstVisibleItemPosition(); } SavedState newState = new SavedState(superState); newState.mScrollPosition = mScrollPosition; return newState; } @Override protected void onRestoreInstanceState(Parcelable state) { super.onRestoreInstanceState(state); if(state != null && state instanceof SavedState){ mScrollPosition = ((SavedState) state).mScrollPosition; LayoutManager layoutManager = getLayoutManager(); if(layoutManager != null){ int count = layoutManager.getItemCount(); if(mScrollPosition != RecyclerView.NO_POSITION && mScrollPosition < count){ layoutManager.scrollToPosition(mScrollPosition); } } } } static class SavedState extends android.view.View.BaseSavedState { public int mScrollPosition; SavedState(Parcel in) { super(in); mScrollPosition = in.readInt(); } SavedState(Parcelable superState) { super(superState); } @Override public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); dest.writeInt(mScrollPosition); } public static final Parcelable.Creator<SavedState> CREATOR = new Parcelable.Creator<SavedState>() { @Override public SavedState createFromParcel(Parcel in) { return new SavedState(in); } @Override public SavedState[] newArray(int size) { return new SavedState[size]; } }; }

更多推荐

如何使用RecyclerView.State保存RecyclerView的滚动位置?

本文发布于:2023-10-08 01:23:51,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1471103.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:如何使用   位置   RecyclerView   State

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!