Ответ
Для удаления сообщений из истории можно использовать RecyclerView и DiffUtil. Он поможет определить, какие элементы изменились и требуют обновления или удаления.
Пример с DiffUtil.Callback:
class MessageDiffCallback(
private val oldList: List<Message>,
private val newList: List<Message>
) : DiffUtil.Callback() {
override fun getOldListSize() = oldList.size
override fun getNewListSize() = newList.size
override fun areItemsTheSame(oldPos: Int, newPos: Int) =
oldList[oldPos].id == newList[newPos].id
override fun areContentsTheSame(oldPos: Int, newPos: Int) =
oldList[oldPos] == newList[newPos]
}
Использование:
val diffResult = DiffUtil.calculateDiff(MessageDiffCallback(oldList, newList))
adapter.submitList(newList)
diffResult.dispatchUpdatesTo(adapter)
DiffUtil автоматически определит, какие элементы удалены, добавлены или изменены, и обновит RecyclerView оптимально.