Ответ
Используйте notifyItemChanged(position) для обновления только конкретного элемента. Чтобы избежать мерцания, переопределите getChangePayload() в адаптере:
override fun onBindViewHolder(holder: ViewHolder, position: Int, payloads: MutableList<Any>) {
if (payloads.isNotEmpty()) {
// Обновляем только чекбокс
holder.checkBox.isChecked = items[position].isChecked
} else {
super.onBindViewHolder(holder, position, payloads)
}
}
override fun getChangePayload(oldItem: Item, newItem: Item): Any? {
return if (oldItem.isChecked != newItem.isChecked) true else null
}
// При изменении состояния:
fun toggleItem(position: Int) {
items[position].isChecked = !items[position].isChecked
notifyItemChanged(position, true)
}