Обновление элемента RecyclerView ProgressBar без вызова notifyItemChanged (int) на адаптере

Я пытаюсь обновить progressBar, которое является частью одного из элементов RecyclerView. Я знаю, что могу сделать это двумя способами,

Метод 1. Обновляя строку элемента, вызывая notifyItemChanged (position)

Метод 2: доступ к представлению с помощью метода findViewByPosition () объекта LayoutMananger.

Но, к сожалению, в моем случае ни один из них не работает.

Если я использую первый, весь элемент будет перерисован, цвет фона у recyclerview серый, а элемент белый, поэтому пользователь может заметить обновление всего элемента.

Если я попробую второй, у меня будут проблемы с прокруткой.

Я хочу обновлять прогресс так же, как это делает WhatsApp. заранее спасибо


person Pruthviraj    schedule 25.07.2016    source источник
comment
У меня точно такая же проблема. Я пытался сохранить ViewHolder и обновлять его по мере обновления, но это не сработало.   -  person Vusal    schedule 15.12.2016
comment
@Vusal, посмотри на мой ответ ниже, это решит твою проблему.   -  person Sakiboy    schedule 04.07.2017


Ответы (1)


Если я использую первый, весь элемент будет перерисован, цвет фона у recyclerview серый, а элемент белый, поэтому пользователь может заметить обновление всего элемента.

Я тоже столкнулся с этой проблемой. Чтобы исправить это, вам нужно отключить анимацию изменения элемента по умолчанию. Как только вы отключите анимацию изменения элемента, ваш элемент recyclerView будет обновляться без каких-либо миганий / прыжков, что позволяет вам использовать notifyItemChanged(int) без каких-либо проблем.

Отключите анимацию изменения элемента по умолчанию следующим образом:

((SimpleItemAnimator) myRecyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
person Sakiboy    schedule 12.01.2017
comment
Потрясающий братан. Сделал мой день. Большое спасибо. - person Name is Nilay; 16.05.2017
comment
@AmirZiarati, полностью согласен с вашим комментарием;) - person Sakiboy; 18.08.2018