Android Kotlin diffutil.itemcallback, кажется, имеет слепое пятноAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Android Kotlin diffutil.itemcallback, кажется, имеет слепое пятно

Сообщение Anonymous »

В моем переработке я использовал ListDapter в сочетании с diffutil.itemcallback .

Код: Выделить всё

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)
}
}
recyclerview элементы имеют 3 разных типа, все наследуют от того же интерфейса. /> Список появляется как
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])
Отказ от нового списка [4], который является недавно вставленным элементом.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... blind-spot
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»