- Добавление и удаление элементов Android RecyclerView
- 17 ответов
- Проблема
- Решение «хорошо»
- Лучшее решение
- Даже лучшее решение (мнение)
- Android RecyclerView добавление и удаление элементов
- 12 ответов
- добавить один элемент
- удалить один элемент
- Android RecyclerView добавление и удаление элементов
- проблема
- Решение
- Лучший подход
- Android RecyclerView добавление и удаление элементов
- Удалить элемент из recyclerview нажатием кнопки — Kotlin MVVM Firestore
- 1 ответ
Добавление и удаление элементов Android RecyclerView
У меня есть RecyclerView с текстовым полем TextView и перекрестной кнопкой ImageView. У меня есть кнопка за пределами recyclerview, которая делает перекрестную кнопку ImageView видимой / отсутствующей.
Я хочу удалить элемент из recylerview, когда нажата кнопка ImageView с перекрестными элементами.
Как я могу заставить что-то вроде onClick работать с моим crossButton ImageView? Есть ли способ лучше? Может быть, изменить весь элемент onclick на удалить элемент? В recyclerview отображается список мест, которые необходимо отредактировать. Будем очень признательны за любые технические советы или комментарии / предложения по наилучшей реализации.
17 ответов
Я сделал нечто подобное. В вашем MyAdapter :
Надеюсь это поможет.
Изменить:
getPosition() теперь не рекомендуется, используйте вместо него getAdapterPosition() .
В первую очередь необходимо удалить товар из списка!
Если предмет все еще не удален, используйте этот магический метод 🙂
Проблема
RecyclerView по умолчанию не знает об изменениях в вашем наборе данных. Это означает, что всякий раз, когда вы производите удаление / добавление в свой список данных, эти изменения не будут отражены непосредственно в вашем RecyclerView. (т.е. вы удаляете элемент с индексом 5, но 6-й элемент остается в вашем представлении ресайклера).
Решение «хорошо»
RecyclerView предоставляет вам некоторые методы сообщения об изменениях набора данных, отражая эти изменения непосредственно в элементах вашего списка. Стандартные API Android позволяют связать процесс удаления данных (для целей вопроса) с процессом удаления View.
Мы говорили о следующих методах:
Лучшее решение
Если вы не должным образом укажете, что происходит при каждом добавлении, изменении или удалении элементов, дочерние элементы RecyclerView не реагируют на запросы из-за отсутствия информации о том, как перемещать различные представления по список.
Вместо этого следующий код будет точно воспроизводить анимацию только для удаляемого дочернего элемента (и, в качестве примечания, он исправил любые IndexOutOfBoundException , отмеченные трассировкой стека как «несогласованность данных»).
Под капотом, если мы заглянем в RecyclerView , мы можем найти документацию, объясняющую, что второй параметр, который мы передаем в notifyItemRangeRemoved , — это количество элементов, которые удалены из набора данных, а не общее количество предметов (как ошибочно указано в некоторых других источниках информации).
Даже лучшее решение (мнение)
Возможно, это повторяющийся ответ, но для меня он весьма полезен. Вы можете реализовать приведенный ниже метод в RecyclerView.Adapter и можете использовать этот метод в соответствии с вашими требованиями, я надеюсь, что он сработает для вас
Я пробовал все приведенные выше ответы, но вставка или удаление элементов в recyclerview вызывает проблему с позицией в наборе данных. Закончилось использованием delete(getAdapterPosition()); внутри viewHolder, который отлично работал при поиске положения элементов.
Проблема, с которой я столкнулся, заключалась в том, что я удалял элемент из списка, который больше не был связан с адаптером, чтобы убедиться, что вы изменяете правильный адаптер, вы можете реализовать такой метод в своем адаптере:
И назовите это в своем фрагменте или действии следующим образом:
Источник
Android RecyclerView добавление и удаление элементов
У меня есть RecyclerView с текстовым полем TextView и перекрестной кнопкой ImageView. У меня есть кнопка вне recyclerview, которая делает перекрестную кнопку ImageView видимой / исчезнувшей.
Я ищу, чтобы удалить элемент из recylerview, когда нажата кнопка пересечения элементов ImageView.
Как я могу получить что-то вроде onClick, работающего для моего crossButton ImageView? Есть лучший способ? Может быть, изменение всего элемента onclick в удаление элемента? Recyclerview показывает список местоположений, которые необходимо отредактировать. Любые технические советы или замечания / предложения по наилучшей реализации будут чрезвычайно признательны.
12 ответов
Я сделал что-то подобное. В MyAdapter :
надеюсь, что это помогает.
Edit:
getPosition() это depricated теперь использовать .
во-первых, элемент должен быть удален из списка!
если все еще элемент не удален используйте этот магический метод:)
Я пробовал все вышеперечисленные ответы, но вставка или удаление элементов в recyclerview вызывает проблему с позицией в наборе данных. В конечном итоге с помощью delete(getAdapterPosition()); внутри viewHolder, который отлично работал при поиске положения элементов.
на самом деле с ранее упомянутым кодом (который вы можете найти здесь ниже) все чайлды RecyclerView анимируются, когда один элемент удаляется, и это вообще не отзывчивое решение, также потому, что у него есть некоторые потенциальные скрытые проблемы
вместо этого следующий фрагмент будет воспроизводить анимацию только на удаляемом ребенке, и с моей стороны он перестал бросать IndexOutOfBoundException s, помеченные отладчиком как «несоответствие данных»
если мы копайте в RecyclerView класс мы можем найти pice javadoc, который имеет объяснение, действительно, в качестве второго параметра мы должны передать количество элементов, которые удаляются из набора данных, а не общее количество элементов
проблема была в том, что я удалял элемент из списка, который больше не был связан с адаптером, чтобы убедиться, что вы изменяете правильный адаптер, вы можете реализовать такой метод в своем адаптере:
и вызовите его в своем фрагменте или деятельности, как это:
возможно, дубликат ответа, но довольно полезный для меня. Вы можете реализовать метод, приведенный ниже в RecyclerView.Adapter и может использовать этот метод в соответствии с вашими требованиями, я надеюсь, что это будет работать для вас
вот некоторые визуальные дополнительные примеры. См.мой более полный ответ для примеров добавления и удаления диапазона.
добавить один элемент
добавить «свинья» по индексу 2 .
удалить один элемент
удалить «свинья» из списка.
если вы хотите удалить пункт, вы должны сделать это: первое удаление:
на следующем шаге вы должны уведомить адаптер recycler, что вы удалите элемент с помощью этого кода:
но если вы измените пункт, сделать это: сначала измените параметр вашего объекта следующим образом:
затем сообщите своему адаптеру recycler, что вы изменяете элемент этим кодом:
надеюсь, что помогает вы.
сделать интерфейс в пользовательский класс адаптера и обработки нажмите событие на recycler view..
после определения адаптера и привязки к представлению recycler, называемому ниже кодом..
Источник
Android RecyclerView добавление и удаление элементов
У меня есть RecyclerView с текстовым полем TextView и кросс-кнопка ImageView. У меня есть кнопка за пределами окна просмотра, которая делает видимую / исчезнувшую перекрестную кнопку ImageView.
Я ищу, чтобы удалить элемент из recylerview, когда эти элементы крест кнопка ImageView нажата.
Как я могу получить что-то вроде onClick, работающее для моего CrossButton ImageView? Есть ли способ лучше? Может быть, изменив весь элемент на клик, чтобы удалить элемент? В окне повторного просмотра отображается список мест, которые необходимо отредактировать. Любые технические советы или комментарии / предложения по наилучшей реализации будут высоко оценены.
Я сделал что-то подобное. В вашем MyAdapter :
Надеюсь это поможет.
Редактировать:
getPosition() устарела, используйте getAdapterPosition() вместо этого.
Прежде всего, элемент должен быть удален из списка!
если этот предмет не удален, используйте этот магический метод 🙂
проблема
RecyclerView по умолчанию не знает изменений вашего набора данных. Это означает, что всякий раз, когда вы делаете удаление / добавление в свой список данных, эти изменения не будут отражены непосредственно в вашем RecyclerView.
Решение
RecyclerView предлагает вам несколько способов поделиться своим состоянием набора данных. Это происходит потому, что изменение вашего набора данных не подразумевает изменения представления, и наоборот. Стандартные API-интерфейсы Android позволяют связать процесс удаления данных (для целей вопроса) с процессом удаления представлений.
Лучший подход
Если вы не укажете правильно, что происходит при добавлении / удалении элементов (речь идет о представлениях), дети RecyclerView анимируются без ответа из-за отсутствия информации о том, как перемещать различные представления по списку.
Вместо этого следующий код будет точно воспроизводить анимацию только на IndexOutOfBoundException удаленном дочернем элементе (и, как примечание, для меня он исправил любые s, помеченные стековой трассировкой как «несогласованность данных»)
Если заглянуть внутрь, RecyclerView мы можем найти документацию, объясняющую, что вторым параметром, который мы должны передать, является количество элементов, которые удаляются из набора данных, а не общее количество элементов (как неправильно указано в некоторых других источниках информации).
Источник
Android RecyclerView добавление и удаление элементов
У меня есть RecyclerView с текстовым полем TextView и крест-кнопкой ImageView. У меня есть кнопка вне recyclerview, которая делает крест-кнопку ImageView видимой/удаленной.
Я ищу, чтобы удалить элемент из recylerview, когда нажата кнопка CrossView ImageView.
Как я могу получить что-то вроде onClick, работающего для моего crossButton ImageView? Есть ли способ лучше? Возможно, изменение всего элемента onclick на удаление элемента? В recyclerview показан список мест, которые необходимо отредактировать. Любые технические консультации или комментарии/предложения по наилучшей реализации будут чрезвычайно оценены.
Я сделал что-то подобное. В вашем MyAdapter :
Надеюсь это поможет.
Редактировать:
getPosition() устарела, используйте getAdapterPosition() .
прежде всего, элемент должен быть удален из списка!
если элемент, который не был удален, использует этот магический метод:)
На самом деле с ранее упомянутым кодом (который вы можете найти здесь ниже) все дочерние элементы RecyclerView анимируются, когда удаляется один элемент, и это вообще не адаптивное решение, в том числе из-за потенциальных скрытых проблем.
Вместо этого следующий фрагмент будет воспроизводить анимацию только для удаляемого дочернего элемента, и с моей стороны он перестал генерировать IndexOutOfBoundException , помеченные отладчиком как «несоответствие данных».
Если мы покопаемся в классе RecyclerView то сможем найти кусок javadoc, в котором есть объяснение, действительно, в качестве второго параметра мы должны передать количество элементов, которые удалены из набора данных, а не общее количество элементов
Источник
Удалить элемент из recyclerview нажатием кнопки — Kotlin MVVM Firestore
У меня возникают проблемы с удалением данных из моей коллекции Firestore, когда пользователь нажимает кнопку удаления в recyclerview. Я могу удалить его из recyclerview без каких-либо проблем, но у меня возникают проблемы с установлением соединения между адаптером, моделью просмотра и репозиторием, который обрабатывает операции Firestore.
В своем адаптере я удаляю элемент, на который нажал пользователь, из recyclerview:
Recyclerview заполняется после запроса к коллекции Firestore в моей модели просмотра:
Затем в моем фрагменте я наблюдаю за любыми изменениями, которые могут произойти с сохраненными продуктами:
Есть ли способ, которым я могу наблюдать / сохранять идентификатор удаленного элемента в моем адаптере и «передавать» этот идентификатор из адаптера в пользовательский интерфейс, где я вызываю функцию, объявленную в модели представления, всякий раз, когда это поле, содержащее идентификатор, заполняется? Или мне следует напрямую обращаться к модели просмотра из адаптера? Почему-то это кажется неправильным .
1 ответ
Объявить одну локальную переменную
Затем обновите эту переменную до события onClick для deleteButton
Создайте один метод в адаптере ( ArticleAdapter )
Которые возвращают позицию удаленного элемента и вызывают этот метод в пользовательском интерфейсе ( ArticleOverviewFragment ), где вам потребуется получить позицию удаленного элемента из recyclerview
Теперь вы получите значение удаления позиции, используя переменную removedItemPosition
Источник