Код: Выделить всё
class CustomDiffCallback : DiffUtil.ItemCallback() {
override fun areItemsTheSame(p0: TypeInterface, p1: TypeInterface): Boolean {
return ((p0 is Type1 && p1 is Type1) && p0.id == p1.id)
|| (p0 is Type2 && p1 is Type2)
|| (p0 is Type3 && p1 is Type3)
}
override fun areContentsTheSame(p0: TypeInterface, p1: TypeInterface): Boolean {
return ((p0 is Type1 && p1 is Type1) && p0 == p1)
|| (p0 is Type2 && p1 is Type2)
|| (p0 is Type3 && p1 is Type3)
}
}
a b c d d < /p>
Я использовал отладчик, чтобы исследовать то, что происходит в процессе вычисления, и обнаружил, что вычисление проводилось в следующем порядке: < /p>
Код: Выделить всё
areContentsTheSame(oldlist[4], newlist[5])
areContentsTheSame(oldlist[0], newlist[0])
areContentsTheSame(oldlist[1], newlist[0])
areContentsTheSame(oldlist[2], newlist[2])
areContentsTheSame(oldlist[3], newlist[3])
Подробнее здесь: https://stackoverflow.com/questions/797 ... blind-spot
Мобильная версия