本文介绍了如何保存recyclerview滚动位置,与recyclerview.state或无的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
任何人,我对Android的RecyclerView.State问题 我有一个RecyclerView,我该如何使用它RecyclerView.State绑定? 目的是我想保存recyclerview滚动位置,有什么想法?
anyone, I have a question on Android RecyclerView.State I have a RecyclerView, How can I use it bind with RecyclerView.State ? the purpose is i want to save the recyclerview scroll position, have any idea?
推荐答案你怎么打算上次保存保存的位置与 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.getChildCount(); 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滚动位置,与recyclerview.state或无
发布评论