前言:当离开当前Recyclerview跳转到另一个界面时,为了用户体验,很多app如微博都会记录下当前的浏览item位置,以方便跳转回来的时候自动恢复到上次浏览位置。
解决方案:(Fragmengt布局里面放置RecyclerView)
1、首先在onSaveInstanceState()里面保存离开RecyclerView界面时的位置position
/*
* 保存离开Fragment时的浏览位置
*/
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if(layoutManager==null)
layoutManager = new LinearLayoutManager(getContext());
//返回当前RecycelrView中第一个可见的item的位置
int position = layoutManager.findFirstVisibleItemPosition();
outState.putInt("leavePosition",position);
//获取与该view的顶部的偏移量
int offset = 0;
View currentView = layoutManager.findViewByPosition(position);
if(currentView!=null)
{
offset = currentView.getTop();
}
outState.putInt("offset",offset);
}
position表示滑动到指定item,offset表示item距离顶部的距离
//滑动至上次离开时的浏览位置
if (mySavedInstanceState!=null)
{
int leavePosition = mySavedInstanceState.getInt("leavePosition");
int offset = mySavedInstanceState.getInt("offset");
layoutManager.scrollToPositionWithOffset(leavePosition,offset);
}
*:定位到指定项,当offset为0时如果该项可以置顶就将其置顶显示
3、参考文档
RecyclerView入门学习之LayoutManager