Я не вижу у тебя кода, который список очищает, тебе нужно передавать только обновленные элементы списка, те, что изменились, а ты передаешь вообще всё по новой.
У меня есть такой код, инкапсулированый в адаптер:
//при инициализации, создаю список и добавляю
fun insertData(list:ArrayList<Content>){
val dfc = MyDiffUril(listOfContent,list)
val difResult = DiffUtil.calculateDiff(dfc)
listOfContent.addAll(list)
difResult.dispatchUpdatesTo(this)
}
//по нажатию на вью холдер обновляю список
fun updateData(list:ArrayList<Content>){
val dfc = MyDiffUril(listOfContent,list)
val difResult = DiffUtil.calculateDiff(dfc)
listOfContent.clear()
listOfContent.addAll(list)
difResult.dispatchUpdatesTo(this)
}
listOfContent - список, в адаптере ресайклера
list - список, который я вручную заполняю в мэйн активити
первый аргумент MyDiffUtil - это список в ресайклер адаптере, он же "старый список", второй аргумент - новый список, это мною созданный и заполненный список в мэйн активити.