android - LiveData 分页列表大小始终为 0
问题描述
我使用 android 分页库实现了分页。ViewModel 返回 a LiveData<PagedList<MyObject>>
,我观察到在我设置适配器的片段中,一切正常,除了当我想检查列表的大小始终为 0 时。
viewModel.getSearchResults().observe(this, mList -> {
adapter.submitList(mList);
Log.e("Count", String.valueOf(mList.size()));
});
其中 mList 是PagedList<MyObject>
解决方案
如果您查看从文档中加载数据PagedList
,您会注意到以下内容:
如果您使用
LivePagedListBuilder
获取LiveData<PagedList>
,它将在后台线程上为您初始化 PagedLists 。
此外,可变性和快照声明如下:
PagedList 在加载时是可变的,或者准备从其 DataSource 加载。随着加载成功,可变的 PagedList 将通过主线程上的 Runnables 更新。您可以使用
PagedList.Callback
. (请注意,PagedListAdapter
将收听这些以向 RecyclerView 发送有关更新/更改的信号)。
如果您想监听事件onInserted
,onChanged
或者onRemoved
您可以执行以下操作:
viewModel.observableData.observe(viewLifecycleOwner, Observer { pagedList ->
adapter.submitList(pagedList)
pagedList.addWeakCallback(null, object: PagedList.Callback() {
override fun onChanged(position: Int, count: Int) {}
override fun onInserted(position: Int, count: Int) {
println("count: $count")
}
override fun onRemoved(position: Int, count: Int) {}
})
})
推荐阅读
- wix - 如何静默安装 Microsoft Access Runtime 2013 32 位?
- deep-learning - Caffe 中的 param_need_backward、layer_need_backward_ 和 blob_need_backward_
- android - 禁用和重新启用蓝牙适配器后如何使 Android 连接?
- php - 动态包含包含 js 和 css 资源的 header.php 文件
- c# - 如何将 dll 用于 VB.net 到 C#
- r - glmnet 图 - 没有轴或标签
- angular - 无法解析 ContactEdit 页面的所有参数
- c++ - C++ 模板访问具有不同类型的函数
- java - 如何使用可变参数调用 MethodHandle
- python - 线性回归的成本增加