У меня есть 3 типа элементов, которые я хочу добавить в свой RecyclerView: кнопка (элемент с кнопкой внутри нее), макет (элемент с пустым дисплеем), обычный элемент (элемент с некоторыми элементами внутри).
Я собираюсь написать сценарий, который описывает процесс добавления / удаления, когда он должен работать, но по какой-то причине это не так.
Сценарий:
-добавьте кнопку + манекен в RecyclerView, они будут отображаться просто отлично.
WidgetItem dummy = new WidgetItem(true);
arrayList.add(0, dummy);
ca.notifyItemInserted(0);//ca is my adapter
WidgetItem btnHolder = new WidgetItem();
btnHolder.setButton(true);
arrayList.add(0, btnHolder);
ca.notifyItemInserted(0);
-добавить еще один обычный элемент + 2 манекена -> штраф
if (nbrItems % 3 == 0) {
for (int i = 0; i < 2; i++) {
WidgetItem dummy = new WidgetItem(true);
dummy.setTilte("dummy" + i);
arrayList.add(0, dummy);
ca.notifyItemInserted(0);
}
}
arrayList.add(0, wItem);
ca.notifyItemInserted(0);
-удаление 1 манекен + добавитьобычный элемент -> отлично
if ((nbrDummy == 3)||(nbrDummy == 2))
for (int i = 0; !foundDummy; i++) {
if (cii.get(i).getDummy()) {
arrayList.remove(i);
ca.notifyItemRemoved(i);
foundDummy = true;
}
}
arrayList.add(0, wItem);
ca.notifyItemInserted(0);
- убрать 1 манекен + добавить обычный элемент (такой же, как указано выше) -> не отлично
Это когда возникает проблема, а неполучая 3-й «обычный элемент», вместо этого на дисплее появляется другая пустышка.
Меня смутило то, что метод «onCreateViewHolder» в моем настраиваемом адаптере даже не вызывался на этом шаге, в то время как он вызывался простохорошо в предыдущих.Даже если элемент, который только что отображался, был фиктивным, метод "onCreateViewHolder" должен выполняться, по крайней мере, так, как должен.
Но код просто пропустил прямо к методу "onBindViewHolder".
Я подозреваю, что, возможно, что-то случилось после удаления этого манекена, но опять же, почему это сработало в приведенном выше коде.
Я попытался «notifyItemRangeChanged» после удаления манекена, но все возникло неполадкой в целом recyclerView.
Итак, что здесь происходит?