Удаление элемента из RecyclerView и вставка его в другую позицию - PullRequest
3 голосов
/ 15 июня 2019

Я хочу удалить элемент из RecyclerView внутри onBindViewHolder, используя position.Этот параметр позиции является позицией видов, видимых на экране, а не фактической позицией элемента в ArrayList.Если я хочу удалить этот элемент из этой позиции в списке и переместить его в другую часть ArrayList, которая фактически не видна на экране (позиция onBindViewHolder мне неизвестна), могу ли я на самом деле каким-то образом обновить этот список с помощью notifyItemSetChanged()или единственный способ сделать это правильно - вызвать notifyDataSetChanged())?

Это несколько сложно RecyclerView с несколькими заголовками и вариациями элементов (я использую 5 ViewHolders внутри Adapter).И главное назначение этого адаптера - менять положение предметов, каждый раз копируя их.Это похоже на разделы списка контактов.

Простое представление моей проблемы:

enter image description here

Ответы [ 4 ]

0 голосов
/ 15 июня 2019

Хотя предыдущие ответы работают, я думаю, что метод, который вы хотите использовать для уведомления адаптера, следующий:

notifyItemMoved(int fromPosition, int toPosition)

Уведомить всех зарегистрированных наблюдателей, что элемент, отраженный в fromPosition, был перемещен вtoPosition.

Таким образом, вы избегаете использования двух методов при получении эффекта анимации / перехода.

0 голосов
/ 15 июня 2019

правильный путь

list.remove(position);
notifyItemRemoved(position);
list.add(newposition,item);
notifyItemInserted(newposition);  

и позиция OnBindViewHolder - это позиция элемента в вашем списке, то есть, как вы заполняете представление

0 голосов
/ 15 июня 2019

эта работа для меня

  list.remove(position);
  list.add(position, item);
  notifyItemChanged(position, item);
0 голосов
/ 15 июня 2019

Вы можете попробовать это

list.removeItemAt(position)
list.addItemAdd(position)
adapter.notifyDataSetChanged()

Надеюсь, это сработает для вас.

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