java - 如何在 Recyclerview/Layoutmanager 中获取 Scrollposition?

标签 java android android-recyclerview

如何在RecyclerviewLayoutmanager中获取滚动位置?

我可以通过添加一个OnScrollListener来测量滚动位置,但是当Orientation改变时scrollDy是0。

    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;
            }
        });

最佳答案

为了将来使用,如果您在同一 activity 中的 Fragments 之间切换,并且您想要做的只是 save scroll-position for recyclerview 然后recyclerview恢复到相同的滚动位置,可以如下操作:

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

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

并且在您的 onStart()/onCreateView()/onResume() 中,无论哪个回调更合适,请执行以下操作:

recyclerView.getLayoutManager().onRestoreInstanceState(recylerViewState);

这样您就可以成功地将您的 recyclerView 的 状态保持在 parcelable 并随时恢复它。

关于java - 如何在 Recyclerview/Layoutmanager 中获取 Scrollposition?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29581782/

相关文章:

java - 当我 30 分钟后再次打开它时,我的 Android 应用程序中的持久数据丢失了

android - 如何在 Android 应用程序中将图像上传到 FTP 服务器?

javascript - 使用 Promise.then 时是否可以保留在单击事件调用堆栈中?

java - 有没有办法只使 recyclerview 中的项目透明?

android - CardView 中的 ImageView 占满整个屏幕

Java:如何通过鼠标单击中断程序执行中途

java - 战舰游戏中的网格阵列如何编号?

android - 无法在设备 '037c6206441f83d7' : Not a directory 上安装 MyApp.apk

java - 当我加载更多数据时,如何防止 recyclerview 滚动开始

java - 使用 JPA/hibernate 时是否可以将 orm.xml 定义与注释混合在一起?