android - ListAdapter submitList() - 如何滚动到开头
问题描述
我的 RecyclerView 和 ListAdapter 有问题。
通过 API,我按从旧到新的升序接收项目。
然后通过调用 submitList(items) 方法刷新我的列表。
但是,由于一切都是异步的,所以在接收到第一项后,RecyclerView 会一直停留在接收到的第一项的位置上并显示出来。由于在 ListAdapter 类中, submitList() 方法完成时没有回调,因此我找不到在更新到已添加的新项目之一后滚动的方法。
有没有办法在 ListAdapter 更新时进行拦截?
解决方案
不特定于 ListAdapter,但它应该可以工作:
只需使用adapter.registerAdapterDataObserver(RecyclerView.AdapterDataObserver)
并覆盖相关的 onItemXXX 方法来告诉您的 RecyclerView 滚动到任何位置。
举个例子:
adapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() {
override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
(recycler_view.layoutManager as LinearLayoutManager).scrollToPositionWithOffset(positionStart, 0)
}
})
推荐阅读
- javascript - Vue删除路由观察器上的类
- linux - UTS_RELEASE 显示错误的版本
- flutter - Movesense 传感器数据记录
- android - 为什么存储访问功能在 android 10 API-29 上不起作用?错误=13,权限被拒绝?
- mysql - 如何组合两个查询?MySQL
- html - 使用 [style.width.%] 以指数方式设置 div 的宽度
- javascript - DevEd 教程中的滚动功能不起作用
- javascript - ChartJS:悬停时在两个数据点之间画线
- php - 如何解决 WordPress/Cpanel 网站上的“作曲家依赖”问题?
- python-3.x - python asyncio 主动循环