android - 在 LiveData 上应用 Transformation.map
问题描述
在我的 ViewModel 类中,我定义了分页列表配置
private val pagedListConfig: PagedList.Config = PagedList.Config.Builder().apply {
setEnablePlaceholders(true)
setInitialLoadSizeHint(10)
setPageSize(10)
}.build()
之后,我从我的房间数据库中检索我想在我的聊天室活动中显示的消息,这些消息给了我也从数据库中获取的 groupId,我进行了 switchMap 转换
private var groupChatItem = MutableLiveData<GroupChatItem>()
var chatRoomGroupMessages: LiveData<PagedList<MessageWithMsgQueueAccount>> =
Transformations.switchMap(groupChatItem) {
it?.let {
LivePagedListBuilder(
messagesRepository.retrieveChatRoomGroupMessages(
chatRoomServerId,
it.groupId
), pagedListConfig
).build()
}
}
到目前为止一切都很好。在这里,我想转换列表以公开列表列表,所以基本上我想通过函数将每个元素转换为一个元素。所以我需要的是第一个 LiveData 的 Transformation.map(),这样我就可以将其更改为另一个 LiveData。但问题是我想用分页列表来做。我怎样才能做到这一点?
var messageChatItems: LiveData<List<MessageChatItem>> = Transformations.map(chatRoomGroupMessages, messageChatItem -> {
// Here is where i need to call the function
})
fun convertGroupItemToMessageItem(): MessageChatItem {
// here i make the convertion
}
解决方案
所以我让这个工作如下
var chatRoomGroupMessages: LiveData<PagedList<MessageItem>> = Transformations.switchMap(groupChatItem) {
it?.let {
// Here is the messages from database
val groupItemFactory = messagesRepository.getChatRoomMessages()
.map { messageItem: ChatMessageItem? ->
// Here i transform them
toMessageChatItem(messageItem, it.accountId) }
LivePagedListBuilder(
groupItemFactory, pagedListConfig
).build()
}
}
而transform函数就是“toMessageItem()”函数
推荐阅读
- flutter - ClipRRect 没有剪辑它的子小部件,我做错了什么?
- vba - 向模块添加过程会取消用户表单加载/显示,必须运行两次显示用户表单才能显示
- c++ - C ++ - 将双精度向量作为元组进行迭代
- coq - 无论如何我可以在 Coq 中输出所有最短路径吗?
- mysql - 如何使 MariaDB/mySQL INSERT 插入多个表对其他数据库连接来说是原子的
- php - SQL 查询不起作用,但在 PHPMyAdmin 中有效
- android - Jetpack Compose - 更改 Compsable 中的变量
- rust - 如何按模式对向量的元素进行分组?
- c# - 如何调试 UWP 应用程序访问冲突错误?
- r - 从 xts 中提取年月日