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

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

如何在两个视图之间的某个位置滚动用户。?

当用户在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); 

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

你看过RecyclerView.ScrollBy(x,y)了吗?

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

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

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