如何在回收器视图/布局管理器中获取滚动位置?

2022-08-31 21:06:27

如何获取滚动位置或 ?RecyclerviewLayoutmanager

我可以通过添加一个 来测量滚动位置,但是当方向变化为0时。OnScrollListenerscrollDy

    mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
            int scrollDy = 0;
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
            }

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                scrollDy += dy;
            }
        });

答案 1

为了将来使用,如果要在同一位置之间切换,并且您想要做的就是保存滚动位置,然后将recreneckerview恢复到相同的滚动位置,则可以执行以下操作:Fragmentsactivityrecyclerview

在更合适的回调中,请执行以下操作:onStop()/onDestroyView()/onPause()

Parcelable recylerViewState = recyclerView.getLayoutManager().onSaveInstanceState();

在你的任何回调更合适的情况下,执行以下操作:onStart()/onCreateView()/onResume()

recyclerView.getLayoutManager().onRestoreInstanceState(recylerViewState);

通过这种方式,您可以成功地将状态保持在 a 中,并在需要时随时还原它。recyclerView'sparcelable


答案 2

你无法得到它,因为它并不真正存在。 只知道屏幕上的视图,它不知道之前的视图,它们的大小等。LayoutManager

您可以使用滚动侦听器计数的数字不可靠,因为如果数据更改,将执行新的布局计算,并且不会尝试重新计算实际偏移量(您将收到如果视图移动)。RecyclerViewonScroll(0, 0)

RecyclerView估计滚动条的此值,您可以使用类中相同的方法。View

computeHorizontalScrollExtent

computeHorizontalScrollRange

computeHorizontalScrollOffset

这些方法也有其垂直对应物。


推荐