Аномалия в моем коде добавления элемента RecyclerView - PullRequest
1 голос
/ 10 апреля 2019

У меня есть 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.

Итак, что здесь происходит?

1 Ответ

0 голосов
/ 11 апреля 2019

Моя проблема была связана с тем, как работает RecyclerView.

После того, как я удаляю элемент из списка и создаю другой, вместо него возвращается тот же старый задний элемент, который я удалил.

Итак, после нескольких попыток я обнаружил, что размещение recyclerView.getRecycledViewPool (). Clear (); между удалением элементов и кодом создания решило мою проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...