在使用 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 保持为空