Ответ
DiffUtils — это утилита из AndroidX, которая помогает эффективно обновлять RecyclerView. Она вычисляет разницу между старым и новым списками данных и применяет только необходимые изменения (добавление, удаление, перемещение элементов), вместо полного перерисовывания списка.
Основные классы:
DiffUtil.Callback— абстрактный класс для сравнения элементовDiffUtil.DiffResult— содержит результаты сравнения
Пример:
val callback = object : 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(callback)
diffResult.dispatchUpdatesTo(adapter)
Преимущества:
- Плавная анимация изменений
- Оптимизация производительности
- Минимальные перерисовки