gpt4 book ai didi

android - 如何在 Android 中保存 RecyclerView 的滚动位置?

转载 作者:IT王子 更新时间:2023-10-28 23:33:48 31 4
gpt4 key购买 nike

我有位于 SwipeRefreshLayout 内部的 Recycler View 。此外,有能力在另一个 Activity 中打开每个项目。返回 Recycler 后,我需要滚动到所选项目或上一个 Y。该怎么做?

是的,我在 Google 上搜索过,在 StackOverFlow 中找到了有关保存布局管理器实例的文章,例如:RecyclerView store / restore state between activities .但是,它对我没有帮助。

更新

现在我有这种解决问题,但是,当然,它也不起作用。

private int scrollPosition;

...//onViewCreated - it is fragment
recyclerView.setHasFixedSize(true);
LinearLayoutManager llm = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(llm);
data = new ArrayList<>();
adapter.setData(getActivity(), data);
recyclerView.setAdapter(adapter);
...

@Override
public void onResume() {
super.onResume();
recyclerView.setScrollY(scrollPosition);
}

@Override
public void onPause() {
super.onPause();
scrollPosition = recyclerView.getScrollY();
}

是的,我尝试过 scrollTo(int, int) - 不起作用。

现在我尝试只滚动到 Y = 100,但它根本不滚动。

最佳答案

保存回收 View 位置的当前状态@onPause:

    positionIndex= llManager.findFirstVisibleItemPosition();
View startView = rv.getChildAt(0);
topView = (startView == null) ? 0 : (startView.getTop() - rv.getPaddingTop());

恢复滚动位置@onResume:

    if (positionIndex!= -1) {
llManager.scrollToPositionWithOffset(positionIndex, topView);
}

或者其他方式可以是@onPause:

long currentVisiblePosition = 0;
currentVisiblePosition = ((LinearLayoutManager)rv.getLayoutManager()).findFirstCompletelyVisibleItemPosition();

恢复@onResume:

((LinearLayoutManager) rv.getLayoutManager()).scrollToPosition(currentVisiblePosition);
currentVisiblePosition = 0;

关于android - 如何在 Android 中保存 RecyclerView 的滚动位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36568168/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com