繁体   English   中英

滚动到recyclerview的最后一个位置

[英]scroll to last position of 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);
}

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

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

只需设置setStackFromEnd=truesetReverseLayout=true以便LLM setReverseLayout=true布局项目。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM