如何使用RecyclerView和LinearLayoutManager显示项目在顶部而不管项目数量?

时间:2016-05-16 11:47:10

标签: android android-recyclerview linearlayoutmanager

我有一个项目列表。这些项目按日期排序。当用户打开应用程序时,应该看不到具有日期之前的项目(“旧”项目),但用户应该能够通过将列表滚动到顶部来查看它们。

我找到第一个项目的position,其中包含将来的日期(“新”项目)并致电recyclerView.scrollToPosition(position)

我也试过layoutManager.scrollToPositionWithOffset(position, 0)

如果列表中有许多“新”项,则此方法有效。

但如果项目太少(例如,一个“旧”和一个“新”),则这些方法不起作用。

如何以编程方式将列表滚动到指定位置的项目,无论列表中有多少项目,都将此项目置于顶部?

1 个答案:

答案 0 :(得分:2)

最初,为RecyclerView提供仅包含未来事件的数据集。

onTouchListner上设置recyclerView以检测向上滚动。如果findFirstCompletelyVisibleItemPosition()在检测到向上滚动时返回第一个索引,则表示向上滚动过度。然后,更改数据集以包括旧条目。然后,使用adapter.notifyDataSetChanged()通知适配器数据集更改并重新列出列表。

注意:

  1. onTouchListner上设置RecyclerView时请确认 不要吸收触摸事件[onTouchEvent() should return false]

  2. 有一次,您第一次发现了向上滚动过度, 您可以设置一个标志,表示您不需要更改 未来触摸事件的数据集。