@DemaDima
Love Android

Why doesn't DiffUtils update items position in adapter after remove item (JAVA)?

When i remove item in my list and use diffUtils for update my adapter, my adapter doesn't change position for items which are behind him in adapter. How can i do that?

for (AppsItem appsItem : appsItems) {
      if (appsItem.isChecked()) {
                        appsItems.remove(appsItem);
                        break;
                    }
                }

                AppsDiffUtil appsDiffUtil =
                        new AppsDiffUtil(appsAdapter.getAppsList(), appsItems);
                DiffUtil.DiffResult appsDiffResult = DiffUtil.calculateDiff(appsDiffUtil,true);
                appsAdapter.setAppsList(appsItems);
                appsDiffResult.dispatchUpdatesTo(appsAdapter);
  • Вопрос задан
  • 326 просмотров
Решения вопроса 1
@foonfyrick
Я не вижу у тебя кода, который список очищает, тебе нужно передавать только обновленные элементы списка, те, что изменились, а ты передаешь вообще всё по новой.
У меня есть такой код, инкапсулированый в адаптер:

//при инициализации, создаю список и добавляю
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 - это список в ресайклер адаптере, он же "старый список", второй аргумент - новый список, это мною созданный и заполненный список в мэйн активити.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы