【问题标题】:scroll to last position of recyclerview滚动到recyclerview的最后一个位置
【发布时间】:2016-05-11 15:02:51
【问题描述】:

我想在销毁或暂停应用程序后滚动到 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)。如何正确获取偏移量并滚动到具有正确偏移量的所需项目?提前谢谢你。

【问题讨论】:

    标签: java android scroll android-recyclerview


    【解决方案1】:

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

    只需设置 setStackFromEnd=truesetReverseLayout=true 以便 LLM 将从头开始布局项目。

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

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

    【讨论】:

    • 谢谢@Maheshwar Ligade。我在 onCreateView 中设置了 LayoutManager。 scrollToPosition(int pos) 滚动到特定位置的顶部,使用它会忽略从顶部的偏移量。
    • 我认为你应该从 yourList.size() 中减去 1(这不是我的想法,Goodlife 建议将其作为编辑,我只是​​不认为它属于不属于的人的编辑不要发布答案)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多