В чем разница между методом 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 () - это метод уведомления адаптера для перерисовки его представлений после изменения данных.