Alexander_Kolmachikhin
@Alexander_Kolmachikhin
Android Programming

Почему перемешиваются данные в RecyclerView?

У меня есть RecyclerView со списком заданий. После нажатия "выполнить" срабатывает следующий код:
listItemTask.remove(position);
    notifyItemRemoved(position);
    notifyItemRangeChanged(position, listItemTask.size());


После чего удаляется 1 элемент из списка. Данные отображаются нормально. Удалаяю другой элемент списка на несколько позиций ниже. Все еще без проблем. Но теперь, удалив элемент списка повыше предыдущего, происходит смешивание уже удаленного и какого-то другого элемента который еще живет в списке. Причем смешиваются не все данные, что очень сбивает с толку, ведь если уж данные перепутались из-за, очевидно, ложных позиций, должна была получится точная копия прошлого удаленного элемнта. Но этого, как я описал, не проиходит, что-то остается, а что-то меняется.

Вот мой onBindViewHolder:
public void onBindViewHolder(@NonNull final ViewHolder holder, @SuppressLint("RecyclerView") int p) {
        int position = holder.getAdapterPosition();
        ItemTask task = listItemTask.get(position); 

        holder.titleTask.setText(task.getTitle() + ""); // не заменяется

        if (task.getDeadline().equals("Без дедлайна")) { // заменяется
            holder.deadlineLayout.setVisibility(View.GONE);
        } else {
            holder.deadlineTask.setText(task.getDeadline() + "");
        }

        holder.numberCoinsTask.setText(task.getRewardCoins() + ""); // не заменяется
        holder.numberProgressTask.setText(task.getRewardProgress() + ""); // не заменяется

        iconHelper = new IconHelper(task.getAttributeImproveSkill(), task.getImportance());
        holder.iconImproveSkill.setBackgroundResource(iconHelper.getBg()); // не заменяется

        if (task.getIdImproveSkill() == -1) { // заменяется
            holder.titleImproveSkill.setText("Без улучшаемого навыка");
            holder.improveSkillLayout.setVisibility(View.GONE);
            holder.iconImproveSkill.setImageResource(R.drawable.icon_standart);

        } else { // тоже заменяется
            holder.titleImproveSkill.setText(task.getTitleImproveSkill());
            holder.iconImproveSkill.setImageResource(IconHelper.iconRes[task.getIconImproveSkill()]);
            holder.pointsAttribute.setText(task.getPointsAttributeImproveSkill() + "");
            holder.iconAttribute.setImageResource(iconHelper.getIconAttribute());
            holder.pointsAttribute.setVisibility(View.VISIBLE);
            holder.iconAttribute.setVisibility(View.VISIBLE);

        }
    }


Я достаточно долго ищю решение этой проблемы в сети, но так и не нашел. Надеюсь, хоть тут ответ появится...
  • Вопрос задан
  • 113 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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