2015-08-17 3 views

ответ

5

Как говорится в Документации.

public void swapAdapter (Adapter adapter, boolean removeAndRecycleExistingViews) 

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

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

и за

public final void notifyDataSetChanged() 

Уведомить любые зарегистрированные наблюдатель, что данные изменились.

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

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^