3

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

Метод 1: При обновлении строки элемента, вызвав notifyItemChanged (позиция)

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

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

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

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

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

+0

У меня такая же проблема. Я попытался сохранить ViewHolder и обновить его при обновлении прогресса, но он не работает. – Vusal

+0

@ Vusal, посмотрите на мой ответ ниже, это исправит проблему вашей стороны. – Sakiboy

ответ

8

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

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

Выключить анимацию изменения элементов по умолчанию так:

((SimpleItemAnimator) myRecyclerView.getItemAnimator()).setSupportsChangeAnimations(false); 
+1

Awesome bro. Сделал мой день. Большое спасибо. –

+1

@ Сакибойская шахта тоже :) – Nisarg