Как создать Adapter для DiffUtil

«Как создать Adapter для DiffUtil» — вопрос из категории UI и Views, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для создания адаптера с DiffUtil нужно:

  1. Создать класс, унаследованный от DiffUtil.ItemCallback<YourModel>
  2. Переопределить методы areItemsTheSame() и areContentsTheSame()
  3. Использовать ListAdapter или AsyncListDiffer в адаптере

Пример:

class UserDiffCallback : DiffUtil.ItemCallback<User>() {
    override fun areItemsTheSame(oldItem: User, newItem: User): Boolean {
        return oldItem.id == newItem.id
    }

    override fun areContentsTheSame(oldItem: User, newItem: User): Boolean {
        return oldItem == newItem
    }
}

class UserAdapter : ListAdapter<User, UserViewHolder>(UserDiffCallback()) {
    // Реализация ViewHolder и bind методов
}

Ключевые моменты:

  • areItemsTheSame проверяет идентичность объектов (обычно по ID)
  • areContentsTheSame проверяет равенство содержимого
  • ListAdapter автоматически обрабатывает обновления в фоновом потоке
  • Для кастомной логики можно использовать AsyncListDiffer