android - 如何等待 ListAdapter.submitList() 执行并调用 RecyclerView.smoothScrollToPosition(0);
问题描述
我有一个RecyclerView recyclerView
链接到一个ListAdapter adapter
. “列表”从 Firebase 数据库获取新数据,“列表”根据某些对象属性进行排序。然后我打电话adapter.submitList(list)
更新recyclerView - 这非常有效!
但是,我希望 recyclerView 在添加新数据后滚动到列表顶部。但我看到它adapter.submitList(list)
在一个单独的线程上运行。那么我将如何知道何时完成提交和调用recyclerView.smoothScrollToPosition(0);
让我知道我是否应该提供更多详细信息。
解决方案
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
}
});
推荐阅读
- c# - Automapper 执行没有错误,但没有数据从源复制到目标
- flutter-web - seturlstrategy-页面重新加载不起作用:Flutter web 2.0
- python - 如何防止 Matplotlib 在图例中提及相同的行
- c# - 异常处理中间件不处理异常 - 调用 Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware (ASP.NET Core WebAPI)
- unity3d - Unity 和 Blender 之间的角色渲染方式不同
- python - 如何按顺序将 Python 和 shell 控制台输出写入文件?
- python - Django prefetch_related 和 N+1 - 它是如何解决的?
- multipartform-data - 使用图像作为多部分表单数据运行 Newman 集合时,Bitbucket 管道失败
- python - 性别的用户输入不起作用
- javascript - 如何在 JavaScript 中获取点击的 div?