滚动到recyclerview的最后位置

时间:2016-05-11 15:02:51

标签: java android scroll android-recyclerview

我想在销毁或暂停应用后滚动到recyclerview的上次保存位置。我使用下面的代码来保存SharedPreferences

中的相关位置和偏移量
@Override
public void onPause() {
    super.onPause();
    QueryPreferences.setLastPos(getActivity(), String.valueOf(((LinearLayoutManager) mRecyclerView.getLayoutManager()).findFirstVisibleItemPosition()));
    QueryPreferences.setLastOffset(getActivity(), String.valueOf(mRecyclerView.computeVerticalScrollOffset()));
}

以及获取位置和偏移然后滚动到recyclerview的最后位置的代码:

@Override
public void onResume() {
    super.onResume();
    updateUI();//initialization of recyclerview and adapter
    //final int scrllPosition=Integer.parseInt(QueryPreferences.getLastPos(getActivity()));
    final int scrllOffset=Integer.parseInt(QueryPreferences.getLastOffset(getActivity()));
    mLayoutManager.scrollToPositionWithOffset(0,-scrllOffset);//scrolling down
    //I also tried mRecyclerView.scrollBy(0, scrllOffset);
}

如果我将偏移量设置为零,则滚动操作没有任何问题(滚动到项目的顶部),但是当我设置偏移量时,即使使用延迟使用,recyclerview也会滚动到另一个项目(不是最后保存的项目位置) Handler().postDelayed。我应该注意到使用computeVerticalScrollOffset(),我得到的偏移量大到73000,这意味着这个偏移量相对于第一个项目(位置0)。如何正确获取偏移并滚动到具有正确偏移的所需项目?提前谢谢。

1 个答案:

答案 0 :(得分:0)

设置LayoutManager&并在以下代码的帮助下滚动到特定位置。

只需设置setStackFromEnd=truesetReverseLayout=true,以便LLM从最后布置项目。

mLinearLayoutManager = new LinearLayoutManager(this);
mLinearLayoutManager.scrollToPosition(yourList.size()); 

// yourList是您传递给RecyclerView适配器的ArrayList。