首页 > 解决方案 > 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>

标签: androidandroid-livedataandroid-mvvmandroid-pagingandroid-paging-library

解决方案


如果您查看从文档中加载数据PagedList,您会注意到以下内容:

如果您使用LivePagedListBuilder获取LiveData<PagedList>,它将在后台线程上为您初始化 PagedLists 。

此外,可变性和快照声明如下:

PagedList 在加载时是可变的,或者准备从其 DataSource 加载。随着加载成功,可变的 PagedList 将通过主线程上的 Runnables 更新。您可以使用PagedList.Callback. (请注意,PagedListAdapter将收听这些以向 RecyclerView 发送有关更新/更改的信号)。

如果您想监听事件onInsertedonChanged或者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) {}
    })
})

推荐阅读