在使用 Paging library 3.0 时,我们如何将整个对象列表传递给 PagingDataAdapter?

Posted

技术标签:

【中文标题】在使用 Paging library 3.0 时,我们如何将整个对象列表传递给 PagingDataAdapter?【英文标题】:How can we get entire object list passes to the PagingDataAdapter while using Paging library 3.0? 【发布时间】:2020-10-26 04:17:33 【问题描述】:

我是分页库 3.0 的新手,我只需要对本地数据库中的数据进行分页。 最初,我从数据库中获取 PagingSource 并将其用作流。

fun getChatMessages(chatWrapper: ChatWrapper): Flow<PagingData<MessageDisplayModel>> 
    return Pager(
            config = PagingConfig(pageSize = 15,
                    maxSize = 50,
                    enablePlaceholders = true)
    ) 
        xmppChatManager.getChatMessages(chatWrapper)
    .flow

然后在 PagingData 通过 submitData() 方法传递给适配器之后。

lifecycleScope.launch 
        @OptIn(ExperimentalCoroutinesApi::class)
        mViewModel.getChatMessages(chatWrapper).collectLatest 
            adapter.submitData(it) 
    

现在,我关心的是如何从传递给适配器的 PagingData 中获取 MessageDisplayModel 的实际列表?

【问题讨论】:

【参考方案1】:

您可以使用adapter.snapshot().items。更多信息可以在here找到。

【讨论】:

是否存在无需适配器直接从 PagingData 获取项目的方法?【参考方案2】:

从第 3 页开始,需要构造函数来启动整个项目列表,以便在布局中加载一次以进行绑定,如果使用 snapshot() 获取页面列表,则无法更新持有者 itemcount,它在 bindviewholder 和 DiffUtil 之前运行,并且也具有高阶生命周期

尝试使用自定义构造函数

【讨论】:

以上是关于在使用 Paging library 3.0 时,我们如何将整个对象列表传递给 PagingDataAdapter?的主要内容,如果未能解决你的问题,请参考以下文章

深入探索 Paging 3.0: 分页加载来自网络和数据库的数据 | MAD Skills

RecyclerView 与 Paging Library 和 PositionalDataSource 保持为空

基于Android官方Paging Library的RecyclerView分页加载框架

如何使用 Paging 3 库更新单个项目

如何检查 Paging 3 库中的列表大小或空列表

单击 Paging 3 库中的项目加载更多数据