В чем разница между методом swapadapter и методом notifydatasetchanged в представлении Recycler?

Я хотел бы знать, в чем именно разница между swapadapter и notifyDatasetChanged методами RecylerView? Какой из них лучше использовать при изменении данных?

1 ответов


Как гласит документация.

public void swapAdapter (Adapter adapter, boolean removeAndRecycleExistingViews)

ОСП текущего адаптера с одной. Он похож на setAdapter(адаптер), но предполагает, что существующий адаптер и новый адаптер использует тот же RecyclerView.ViewHolder и не очищает RecycledViewPool.

обратите внимание, что он по-прежнему вызывает обратные вызовы onAdapterChanged.

а

public final void notifyDataSetChanged ()

уведомить всех зарегистрированных наблюдателей об изменении набора данных.

есть два разных класса событий изменения данных, изменений элементов и структурных изменений. Изменения элемента - это когда один элемент обновил свои данные, но никаких позиционных изменений не произошло. Структурные изменения - это когда элементы вставляются, удаляются или перемещаются в наборе данных.

это событие не указывает, что изменилось в наборе данных, заставляя наблюдателей предполагать, что все существующие элементы и структура могут быть недействительными. LayoutManagers будут вынуждены полностью перестроиться и ретрансляция всех видимых видов.

RecyclerView попытается синтезировать видимые события структурных изменений для адаптеров, сообщающих, что они имеют стабильные идентификаторы при использовании этого метода. Это может помочь в целях анимации и сохранения визуальных объектов, но отдельные представления элементов все равно нужно будет отскочить и перезапустить.

Если вы пишете адаптер, всегда будет более эффективно использовать более конкретные события изменения, если вы можете. Полагаться notifyDataSetChanged () в крайнем случае.

Ну, я чувствую, что документация хорошо излагает, где лежит разница, и swapAdapter (ad,true) - это способ изменить данные, тогда как notifyDataSetChanged () - это метод уведомления адаптера для перерисовки его представлений после изменения данных.