Android RecyclerView分页 - 如何正确地将项目添加到RecyclerView的顶部?

时间:2016-11-30 06:54:14

标签: android pagination android-recyclerview

我在RecyclerView向下滚动时解决了分页问题,​​但在向上滚动到顶部时无法获得所需的行为。

这里的目标是一个无休止的可滚动列表,当您向下滚动足够远时,顶部的项目将被删除,因为项目被添加到底部。反之亦然,当您向上滚动到顶部时,项目被添加到顶部时,底部的项目将被删除。

我的代码正在做的是当用户滚动到顶部时将下一组数据加载到列表中,但随着下一组数据从服务器返回而保持在顶部。因此,例如,位置0在RecyclerView中变为位置50,而在RecyclerView的数据集中插入了50个新项目。完成加载后,用户仍然在查看位置0并看到已添加新项目,但已跳过了45行以上的RecyclerView而未进行任何其他滚动。然后用户需要稍微向下滚动并再次备份以点击滚动侦听器以将更多项目加载到RecyclerView的顶部。

我已经通过在添加项目后立即调用LinearLayoutManager.scrollToPosition(50)来“解决”此问题,但是当RecyclerView跳转到此位置时,屏幕上会有明显的闪烁,这会阻止平稳的用户体验。

有什么想法吗?

在用户点击屏幕顶部并且有要加载的项目之后,我将如何处理在RecyclerView中删除和插入行的方法:

int end = currentList.size();
currentList.subList(currentList.size()-50, currentList.size()).clear();
recyclerView.getAdapter().notifyItemRangeRemoved(end-50, end);
currentList.addAll(0, items);
recyclerView.getAdapter().notifyItemRangeInserted(0, items.size());
layoutManager.scrollToPosition(50);

我会尽力帮助您在下面看到。每个数字代表RecyclerView中的特定项目。

州1:0 1 2 3 4 5

  • 项目0位于屏幕顶部,用户已启动呼叫以将更多内容加载到列表顶部。

州2:5 6 7 8 9 0 1 2 3 4

  • 没有LayoutManager.scrollToPosition(5)的默认行为:用户现在可以在屏幕顶部看到第5项,跳过第6-0项。
  • 所需行为:用户继续在屏幕顶部看到第0项,但现在可以向上滚动查看第9项,然后是8,然后是7 ......

0 个答案:

没有答案