У меня есть 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);
}
}
Я достаточно долго ищю решение этой проблемы в сети, но так и не нашел. Надеюсь, хоть тут ответ появится...