如何在使用 Paging library 3.0 的情况下将整个对象列表传递给 PagingDataAdapter?

11

我是Paging Library 3.0的新手,我需要仅从本地数据库进行数据分页。最初,我从数据库中获取了PagingSource<Int, MessageDisplayModel>并将其用作流。

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

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

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

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

2个回答

21
你可以使用 adapter.snapshot().items。更多信息可以在此处找到。

1
有没有一种方法可以直接从PagingData中获取项,而不需要适配器? - kirkadev

0

关于分页3,需要构造函数来初始化整个项目列表,以便在绑定时一次性加载到您的布局中。如果使用snapshot()获取页面列表,则无法更新holder itemcount,因为它在bindviewholder之前运行,并且DiffUtil也具有高阶生命周期。

尝试使用自定义构造函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接