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()
。