首页 > 解决方案 > ListAdapter submitList() - 如何滚动到开头

问题描述

我的 RecyclerView 和 ListAdapter 有问题。

通过 API,我按从旧到新的升序接收项目。

然后通过调用 submitList(items) 方法刷新我的列表。

但是,由于一切都是异步的,所以在接收到第一项后,RecyclerView 会一直停留在接收到的第一项的位置上并显示出来。由于在 ListAdapter 类中, submitList() 方法完成时没有回调,因此我找不到在更新到已添加的新项目之一后滚动的方法。

有没有办法在 ListAdapter 更新时进行拦截?

标签: androidandroid-recyclerviewlistadapter

解决方案


不特定于 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)
        }
    })

推荐阅读