java - 滚动到recyclerview的最后位置

标签 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)的。如何正确获取偏移量并滚动到具有正确偏移量的所需项目?预先感谢您。

最佳答案

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

只需设置 setStackFromEnd=truesetReverseLayout=true 即可让 LLM 从末尾开始布局项目。

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

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

关于java - 滚动到recyclerview的最后位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37166542/

相关文章:

java - Google Directions Api 似乎无法在 Kotlin 中运行

java - 缩放 JCheckBox 框

android - 中央按钮以编程方式和动态布局

android - 创建一个没有透明度的波纹可绘制对象

javascript - 滚动浏览 ReactJS 中的部分时如何更新 url 哈希

java - Spring Sleuth - JMS ErrorHandler 上的跟踪中断

java - ANDROID - 如何在 android studio 中将数据库 mysql php 的值显示到 TextView 中

android - 如何将 Parcelable 传递给两个或多个 Activity 或 Fragments?

jquery - 使用 Div 的表结构

delphi - TTreeView : AlphaSort scrolls to selected node (like MakeVisible)