首页 > 解决方案 > 如何等待 ListAdapter.submitList() 执行并调用 RecyclerView.smoothScrollToPosition(0);

问题描述

我有一个RecyclerView recyclerView链接到一个ListAdapter adapter. “列表”从 Firebase 数据库获取新数据,“列表”根据某些对象属性进行排序。然后我打电话adapter.submitList(list)更新recyclerView - 这非常有效!

但是,我希望 recyclerView 在添加新数据后滚动到列表顶部。但我看到它adapter.submitList(list)在一个单独的线程上运行。那么我将如何知道何时完成提交和调用recyclerView.smoothScrollToPosition(0);

让我知道我是否应该提供更多详细信息。

标签: androidandroid-recyclerviewlistadapter

解决方案


ListAdapter 有另一个重载版本的 submitList() ListAdapter#submitList(@Nullable List<T> list, @Nullable final Runnable commitCallback),它将第二个参数作为 Runnable。

根据文档:

提交回调可用于知道何时提交 List,但请注意它 * 可能不会被执行。如果 List B 在 List A 之后立即提交,并且 * 直接提交,则不会运行与 List A 关联的回调。

用法:

    listAdapter.submitList(*your_new_list*, new Runnable() {
        @Override
        public void run() {
            // do your stuff
        }
    });

推荐阅读