Size: a a a

Android Developers

2020 September 01

ℕo ℕame in Android Developers
J.S
Такой вопрос: какие вычисления делает diffUtil или когда его юзать ?
Ну допустим, когда из api приходят лист данных, в котором только 2-3 записи изменились, а не все
источник

AY

Andy Yanechko in Android Developers
ℕo ℕame
Ну допустим, когда из api приходят лист данных, в котором только 2-3 записи изменились, а не все
Но если у тебя один и тот де инстанс списка, то он ничего делать не будет. Там нужно посылать каждый раз новый
источник

J

J.S in Android Developers
ℕo ℕame
Ну допустим, когда из api приходят лист данных, в котором только 2-3 записи изменились, а не все
Получается бекэндщики смухлевали
источник

AY

Andy Yanechko in Android Developers
Dem Mort
кинь код
Вот с DiffUtil'ом, результат такой же
https://pastebin.com/TTC7Hi4Z
источник

А

Александр in Android Developers
Всем привет. ребят, подскажите, самый простой адаптер. Проблема в том что иногда отрисовывает неправильно количество элементов. приходит список из 2 элементов - отрисовывает 1, перезахожу на экран - отрисовывает 2. В чем проблема может быть?
источник

J

J.S in Android Developers
Александр
Всем привет. ребят, подскажите, самый простой адаптер. Проблема в том что иногда отрисовывает неправильно количество элементов. приходит список из 2 элементов - отрисовывает 1, перезахожу на экран - отрисовывает 2. В чем проблема может быть?
Поставить логи и все
источник

AY

Andy Yanechko in Android Developers
Он переиспользует компненты, а не создаёт. Ты должен работать (bindить данные) как будто там все даные не валидны, например у тебя есть проверка:
if (licenceInfo != null) {
   меняешь текст
}
Это не правильный подход. Потому что может так произойти, что у тебя попадётся view где раньше licenceInfo было не null и во вьюхе останется старый текст, нужно:

if (licenceInfo != null) {
   меняешь текст
} else {
  textView.setText("");
}
источник

DM

Dem Mort in Android Developers
то ли я не понимаю, то ли ты юзаешь только ContactListViewHolder
источник

AY

Andy Yanechko in Android Developers
Александр
Всем привет. ребят, подскажите, самый простой адаптер. Проблема в том что иногда отрисовывает неправильно количество элементов. приходит список из 2 элементов - отрисовывает 1, перезахожу на экран - отрисовывает 2. В чем проблема может быть?
А, сори, вопрос про кол-во был, тогда забей, но имею ввиду, что данные при таком подходе будут не валидны
источник

DM

Dem Mort in Android Developers
@Override
   public void onBindViewHolder(@NonNull ContactListViewHolder holder, int position) {
       holder.bind(getItem(position));
   }
источник

AY

Andy Yanechko in Android Developers
ContactListViewHolder - абстрактный класс, в котором один метод:
public abstract void bind(ContactListModel model);

Два остальных наследуются от него.
ContactListModel - абстрактный класс, с методом, который возвращает тип как int для того что бы различать екземпляры в getItemViewType
источник

А

Александр in Android Developers
Andy Yanechko
А, сори, вопрос про кол-во был, тогда забей, но имею ввиду, что данные при таком подходе будут не валидны
все равно не помогло. лог выводит что 2 элемента и холдер 2 раза отрабатывает. на 1 экране 1 элемент
источник

AY

Andy Yanechko in Android Developers
Александр
все равно не помогло. лог выводит что 2 элемента и холдер 2 раза отрабатывает. на 1 экране 1 элемент
Вангую: высоту match_parent убери из чайлда)
источник

А

Александр in Android Developers
Andy Yanechko
Вангую: высоту match_parent убери из чайлда)
да нет, wrap
источник

AY

Andy Yanechko in Android Developers
Тогда открывай LayoutInspector и смотри что там внутри
источник

DM

Dem Mort in Android Developers
хм, тут конечно дебагом ловить вангую, упрости пока дифутил и тести
источник

DM

Dem Mort in Android Developers
если не найдешь дебаж с одним вьюхолдером
источник

DM

Dem Mort in Android Developers
адаптеры всегда больная тема
источник

DM

Dem Mort in Android Developers
и совет на будущее, если у вьюхи меняется не все, то стоит реализовать getChangePayload у дифутила, чтобы при бинде не затрагивать то, что не меняется
источник

p

podocodenick in Android Developers
Александр
да нет, wrap
А может быть первый итем спрятался за тулбаром?
У друга недавно такое было)
источник