如何等待ListAdapter.submitList()执行并调用RecyclerView.smoothScrollToPosition(0);

Mat*_*Mat 4 android listadapter android-recyclerview

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

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

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

Chi*_*oni 7

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
        }
    });
Run Code Online (Sandbox Code Playgroud)