Я хотел бы знать, что именно представляет собой различие между swapAdapter и notifyDatasetChanged методами RecylerView? Какой из них лучше использовать при изменении данных?В чем разница между методом swapadapter и notifydatasetchanged в представлении Recycler?
ответ
Как говорится в Документации.
public void swapAdapter (Adapter adapter, boolean removeAndRecycleExistingViews)
Заменяет текущий адаптер с предоставленным. Он похож на setAdapter (Adapter), но предполагает, что существующий адаптер и новый адаптер используют тот же RecyclerView.ViewHolder и не очищают RecycledViewPool.
Обратите внимание, что он по-прежнему вызывает обратные вызовы AdapterChanged.
и за
public final void notifyDataSetChanged()
Уведомить любые зарегистрированные наблюдатель, что данные изменились.
Существует два разных класса событий изменения данных, изменения элементов и структурные изменения. Изменения элемента - это когда один элемент обновил данные, но изменений позиции не произошло. Структурные изменения - это когда элементы вставлены, удалены или перемещены в наборе данных.
Это событие не указывает, что изменилось в наборе данных, заставив любых наблюдателей предположить, что все существующие элементы и структура могут быть более недействительными. LayoutManagers будут вынуждены полностью переустановить и передать все видимые виды.
RecyclerView попытается синтезировать видимые события структурных изменений для адаптеров, сообщающих, что они имеют стабильные идентификаторы при использовании этого метода. Это может помочь в целях сохранения анимации и визуального объекта, но отдельные представления элементов все равно нуждаются в отскоке и восстановлении.
Если вы пишете адаптер, всегда будет более эффективно использовать более конкретные события изменений, если сможете. Положитесь на notifyDataSetChanged() в качестве последнего средства.
Ну, я чувствую, что документация прекрасно описывает, где находится различие, и swapAdapter (ad, true) - способ изменения данных, тогда как notifyDataSetChanged() - это метод уведомления адаптера о переделке своих представлений после данных был изменен.