我有一个包含RecyclerView的片段。当我从其他地方返回片段时,我会
if(null!=savedInstanceState) {
mScrollPosition = savedInstanceState.getInt(ITEM_POSITION);
mRecyclerView.scrollToPosition(mScrollPosition);
}
但现在我不知道在onSaveInstanceState
内放什么:
@Override
public void onSaveInstanceState(Bundle bundle){
super.onSaveInstanceState(bundle);
Log.d(TAG, "onSaveInstanceState");
mScrollPosition=mRecyclerView.getScrollPosition();//???
bundle.putInt(NITEM_POSITION,mScrollPosition);
}
没有mRecyclerView.getScrollPosition()
。
更新
经过测试后发现,使用mRecyclerView.scrollToPosition
并不足以确保顺畅的用户体验。如果项目视图足够高,scrollToPosition(ofFirstVisibleItem)
可能会偏离。那么有更好的解决方案吗?
答案 0 :(得分:1)
您可以从LayoutManager获取滚动。例如:
mScrollPosition = ((LinearLayoutManager) layoutManager).findFirstVisibleItemPosition();
同时查看此答案How to save RecyclerView's scroll position using RecyclerView.State?