Примените Transforamtion.map к LiveData <PagedList of objects>

Внутри моего класса ViewModel я определил конфигурацию страничного списка

private val pagedListConfig: PagedList.Config = PagedList.Config.Builder().apply {
        setEnablePlaceholders(true)
        setInitialLoadSizeHint(10)
        setPageSize(10)
    }.build()

После этого я извлекаю из своей базы данных Room сообщения, которые я хочу показать в своей активности chatRoom, заданной 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()
            }
        }

Все хорошо до сих пор. Здесь я хочу преобразовать список, чтобы открыть список списка, поэтому в основном я хочу преобразовать каждый элемент в элемент с помощью функции. Итак, мне нужен Transformation.map() для первого LiveData, чтобы я мог изменить его на другой 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
    }

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()
        }
    }

А функция преобразования - это функция toMessageItem().

Другие вопросы по тегам