android 保存浏览位置,android如何保存RecyclerView的滚动位置使用RecyclerView.State?

该博客介绍了如何在Android中扩展RecyclerView以保存并恢复用户的滚动位置。通过覆盖onSaveInstanceState()和onRestoreInstanceState()方法,可以捕获并设置LinearLayoutManager的firstVisibleItemPosition,从而在应用重新打开时恢复滚动状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

你如何计划用RecyclerView.State保存上次保存的位置?

你可以总是依靠ol的好保存状态。扩展RecyclerView并覆盖onSaveInstanceState()和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 CREATOR

= new Parcelable.Creator() {

@Override

public SavedState createFromParcel(Parcel in) {

return new SavedState(in);

}

@Override

public SavedState[] newArray(int size) {

return new SavedState[size];

}

};

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值