有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android:在recyclerview中获取用户在屏幕上的确切位置

我将参考以下问题,因为这个人一个月前问了同样的问题,但还没有人回答他:

How to scroll the user at the exact position, which is somewhere between two views.?

当用户滚动到recyclerview列表中的某个位置并最小化应用程序,然后从bg恢复它-或者进入另一个活动/片段并返回到recyclerview-我希望列表滚动到用户所在的确切位置。当我说确切的位置时,我的意思是它必须是完全相同的位置-如果我只是告诉应用程序滚动到位置X,那么最上面的视图将位于顶部,但它不会像用户以前那样是完全相同的列表状态。我需要列表看起来与用户离开并返回之前的样子相同。这可能吗?如果可能,如何实现

我当前的代码:

viewHolder.objectInTheList.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                        if (recyclerViewInterface != null) {

                            FileAccessUtil.getInstance().setIntegerProperty("recyclerListPosition", position);
                            recyclerViewInterface.onRecyclerviewListEventOccured(position);

                        }
                    }

            });

然后,当我返回活动时,我从fileaccessutil加载该参数并执行以下操作:

 recyclerlist.scrollToPosition(positionFromFileAccessUtil);

这个解决方案是次优的,因为正如我前面提到的,它不会将用户滚动到与之前完全相同的屏幕位置


共 (1) 个答案

  1. # 1 楼答案

    你看过RecyclerView.ScrollBy(x,y)

    ScrollBy(0,y)将以与向上移动手指相同的方向滚动RecyclerView。它不会滚动到绝对位置,相反,它只会将像素添加到上一个滚动位置。要向相反方向滚动,只需使用ScrollBy(0,-y)。请注意,x被设置为零,因为您只想向上/向下滚动

    现在,为了实现一个完整的解决方案,您需要有一种方法来保存列表的当前滚动位置。我没有测试它,但我非常确定RecyclerView.getScrollY()将始终返回0。为了克服这个问题,你需要通过监听RecyclerView的滚动变化来跟踪自己的位置

    当您想要恢复滚动位置时,可以使用保存的当前位置,因为RecyclerView最初的滚动值为0