Какой метод DiffUtil.ItemCallback позволяет перерисовывать только часть элемента

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

Ответ

areContentsTheSame() определяет, изменилось ли содержимое элемента. Если areItemsTheSame() вернул true, а areContentsTheSame()false, DiffUtil вызовет notifyItemChanged() только для этого элемента, что приведет к частичному обновлению через payload.

Пример:

override fun areContentsTheSame(oldItem: User, newItem: User): Boolean {
    return oldItem.name == newItem.name 
            && oldItem.avatar == newItem.avatar
}

// В адаптере:
override fun onBindViewHolder(holder: ViewHolder, position: Int, payloads: List<Any>) {
    if (payloads.isNotEmpty()) {
        // Обновляем только измененные части
    } else {
        super.onBindViewHolder(holder, position, payloads)
    }
}