Для обновления списка в RecyclerView знаю три способа.
notifyDataSetChanged()
notifyItemChanged()
Использовать DiffUtils.
Может кто дать совет в каких случаях, какой способ эффективнее использовать. И если есть еще какие способы.
notifyDataSetChanged()
- заставляет обновить все элементы списка, по сути перерисовывает их все, даже если не было никаких изменений в видимых в данный момент на экране элементов. Обычно используют, когда измененных элементов в списке много и сам список довольно большой.
notifyItemChanged()
- событие изменения конкретного элемента списка, то есть по идее перерисуется только тот элемент, позицию которой передали в аргументе. Предпочтительный способ, когда мы точно знаем какие элементы в списке были изменены, тем более, по логике, если элемент в данный момент не отображается на экране, то лишний раз не будет перерисовки.
DiffUtils
- во многих источниках советуют использовать его вместо notifyDataSetChanged()
, но я как-то не увидел большого выигрыша, даже наоборот, производительность упала. Возможно не так реализовал, не спорю. Но тут по идее зависит от объема самого списка, при большом списке, думаю предпочтительнее notifyDataSetChanged()
, так как в DiffUtils
все равно нужно сравнивать поэлементно.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок