RecyclerView notifyItemRangeChanged не показывает новые данные
Я столкнулся с проблемой с RecyclerView#Adapter
относительно notifyItemRangeChanged
, Кажется, что если Adapter
считает, что имеет размер 0
с последнего звонка getItemCount
а потом я звоню Adapter#notifyItemRangeChanged(0, 1)
, Adapter
будет просто игнорировать вызов (это не приведет, например, к вставке нового элемента).
Это ожидаемое поведение?
1 ответ
Это ожидаемое поведение?
Краткий ответ: да.
Из документов на notifyDataSetChanged()
(да, другой метод, я знаю, но просто ссылаюсь на него здесь, поскольку он объясняет разницу между изменениями элементов и структурными изменениями):
Существует два разных класса событий изменения данных, изменений элементов и структурных изменений. Изменения элемента происходят, когда данные одного элемента обновляются, но позиционные изменения не происходят. Структурные изменения - это когда элементы вставляются, удаляются или перемещаются в наборе данных.
Теперь прочитайте документацию по notifyItemRangeChanged()
(мой акцент):
Это событие изменения элемента, а не событие структурного изменения. Это указывает на то, что любое отражение данных в данном диапазоне позиций устарело и должно быть обновлено. Предметы в данном диапазоне сохраняют одинаковую идентичность.
Это должно ответить на ваш вопрос. Вы делаете структурное изменение (то есть, вы добавляете элемент), следовательно, notifyItemRangeChanged()
не подходящий метод для вызова. Вместо этого вы должны позвонить notifyItemRangeInserted()
(или его единственного эквивалента), который указывает на структурные изменения.