Android 如何使用RecyclerView和LinearLayoutManager在不考虑项目数量的情况下在顶部显示项目?

Android 如何使用RecyclerView和LinearLayoutManager在不考虑项目数量的情况下在顶部显示项目?,android,android-recyclerview,linearlayoutmanager,Android,Android Recyclerview,Linearlayoutmanager,我有一份物品清单。这些项目按日期排序。当用户打开应用程序时,日期早于现在的项目(“旧”项目)不应该可见,但用户应该能够通过将列表滚动到顶部来查看它们 我找到第一个带有未来日期的项目(“新”项目)的position,并调用recyclerView.scrollToPosition(position) 我还尝试了layoutManager.scrollToPositionWithOffset(位置,0) 如果列表中有许多“新”项,则此操作有效 但是如果项目太少(例如,一个“旧”和一个“新”),那么这

我有一份物品清单。这些项目按日期排序。当用户打开应用程序时,日期早于现在的项目(“旧”项目)不应该可见,但用户应该能够通过将列表滚动到顶部来查看它们

我找到第一个带有未来日期的项目(“新”项目)的
position
,并调用
recyclerView.scrollToPosition(position)

我还尝试了
layoutManager.scrollToPositionWithOffset(位置,0)

如果列表中有许多“新”项,则此操作有效

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


如何以编程方式将列表滚动到给定位置的项,以将此项置于顶部,而不管列表中有多少项?

首先,为
RecyclerView
提供一个仅包含未来事件的数据集

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

注:

  • RecyclerView
    上设置
    onTouchListner
    时,请确保 不要吸收触摸事件
    [onTouchEvent()应返回false]

  • 有一次,您第一次检测到向上的过卷, 您可以设置一个标志,指示您不需要更改 未来触摸事件的数据集


  • 尝试此适配器。notifydatasetchanged();调用recyclerView.scrollToPosition(位置)之前<当我调用
    recyclerView.scrollToPosition()
    时,代码>适配器已经用项初始化并绑定到
    recyclerView
    。在此之前还调用了
    adapter.notifyDataSetChanged()