我有一个项目列表。这些项目按日期排序。当用户打开应用程序时,应该看不到具有日期之前的项目(“旧”项目),但用户应该能够通过将列表滚动到顶部来查看它们。
我找到第一个项目的position
,其中包含将来的日期(“新”项目)并致电recyclerView.scrollToPosition(position)
。
我也试过layoutManager.scrollToPositionWithOffset(position, 0)
。
如果列表中有许多“新”项,则此方法有效。
但如果项目太少(例如,一个“旧”和一个“新”),则这些方法不起作用。
如何以编程方式将列表滚动到指定位置的项目,无论列表中有多少项目,都将此项目置于顶部?
答案 0 :(得分:2)
最初,为RecyclerView
提供仅包含未来事件的数据集。
在onTouchListner
上设置recyclerView
以检测向上滚动。如果findFirstCompletelyVisibleItemPosition()
在检测到向上滚动时返回第一个索引,则表示向上滚动过度。然后,更改数据集以包括旧条目。然后,使用adapter.notifyDataSetChanged()通知适配器数据集更改并重新列出列表。
注意:
在onTouchListner
上设置RecyclerView
时请确认
不要吸收触摸事件[onTouchEvent() should return false]
。
有一次,您第一次发现了向上滚动过度, 您可以设置一个标志,表示您不需要更改 未来触摸事件的数据集。