我正在寻找一种方法来PagingDataAdapter
从 Paging 3 库中更新我的特定项目。目前推荐的方法似乎是使 无效,PagingSource
但这会导致适配器再次获取整个数据集,这效率不高,并且还显示了我的加载微调器。
但是,我注意到我可以使用该peek()
方法访问和修改适配器中的项目,并且它似乎工作得很好。我在这里错过了什么吗?这会在某些情况下分崩离析吗?我知道保持数据类不可变是一种很好的做法,但这种方法让我的生活更轻松。这是我的用法示例,它似乎工作得很好:
viewModel.chatMessageUpdateEvents.collect { messageEvent ->
when (messageEvent) {
is FirestoreChatMessageListener.ChatMessageUpdateEvent.MessageUpdate -> {
val update = messageEvent.chatMessage
val historyAdapterItems = chatMessagesHistoryAdapter.snapshot().items
val updatedMessage =
historyAdapterItems.find { chatMessage ->
chatMessage.documentId == messageEvent.chatMessage.documentId
}
if (updatedMessage != null) {
val messagePosition = historyAdapterItems.indexOf(updatedMessage)
chatMessagesHistoryAdapter.peek(messagePosition)?.unsent = update.unsent
chatMessagesHistoryAdapter.peek(messagePosition)?.imageUrl = update.imageUrl
chatMessagesHistoryAdapter.notifyItemChanged(messagePosition)
}
}
}
}