У меня возникла проблема с RecyclerView и RecyclerView.Adapter. У меня есть функция, которая устанавливает список элементов в адаптер. Когда пользователь перебирает-обновлять, я загружаю свежие данные, что означает, что некоторые элементы являются новыми, а затем я устанавливаю элементы в адаптер, и я должен их аннулировать. Моя проблема заключается в notifyItemRangeInserted()
и notifyItemRangeChanged()
. Когда появятся новые элементы, если я их сначала удалю, то notifyItemRangeRemoved()
, затем добавьте и, наконец, вызовите notifyItemRangeInserted()
, это сработает, но все элементы недействительны и мигают. В противном случае, если я определяю разницу в размере между новым и старым набором данных, это не делает недействительными правильные элементы.Обновление элементов адаптера Android RecyclerView
public void setItems(@NonNull List<ItemType> items) {
final int oldSize = mItems.size();
mItems.clear();
notifyItemRangeRemoved(firstPosition(), oldSize);
mItems.addAll(items);
notifyItemRangeInserted(firstPosition(), items.size());
}
mItems
ArrayList.
Что такое 'firstPosition'? \ – Blackbelt
firstPosition() проверяет, имеет ли адаптер заголовок. Если заголовок присутствует, он будет равен 1 в противном случае 0. Я решил эту текущую проблему, выполнив 'notifyItemRangeInserted (firstPosition(), oldSize);' но проблема обновления только крошечного фрагмента элементов не решена без предварительного удаления старого пунктов, а затем применить новые. Таким образом, мигание будет присутствовать, но это приемлемо для моего текущего решения. – John