如何保存recyclerview滚动位置,与recyclerview.state或无 [英] how to save recyclerview scroll position , with recyclerview.state or no
本文介绍了如何保存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或无的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文