2

在我的 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
    }
4

1 回答 1

1

所以我让这个工作如下

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()”函数

于 2020-08-20T11:34:04.483 回答