Примените 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().