Вы сравниваете предыдущее содержимое только с новыми элементами, а не со списком, в котором все они добавлены.
Представьте себе, если this.productList
в настоящее время 1,2,3
, и новый productList
это 4,5,6
. Когда вы запускаете
DiffUtil.calculateDiff(ProductDiffUtil(this.productList, productList!!)
, он будет сравнивать 1
с 4
, 2
с 5
и т.д. c. и сделаем вывод, что все изменилось и новые элементы не были добавлены. (примечание: это упрощенное описание алгоритма DiffUtil, но оно служит для иллюстрации сути)
Вместо этого, если вы хотите использовать DiffUtil:
val oldList = ArrayList(productList)
this.productList.addAll(productList)
val diffResult = DiffUtil.calculateDiff(ProductDiffUtil(oldList, productList!!)
diffResult.dispatchUpdatesTo(this)
или, поскольку вы точно знаете, как многие пункты добавлены и где, просто используйте notifyItemRangeInserted
и избегайте копирования:
val oldSize = this.productList.size
this.productList.addAll(productList)
notifyItemRangeInserted(oldSize, productList.size)