Pull to refresh

Comments 12

О, хорошее замечание, спасибо! Он еще и AsyncListDiffer использует внутри… Неплохо. Добавлю ремарку в статье.

Кстати, Groupie, начиная с 2.2 поддерживает androidx (что сделало невозможным использование её на проектах, которые еще не настолько стильные и молодёжные) и предоставляет метод asyncUpdate для просчитывания DiffUtil в бэкграунде.

Стоит еще упомянуть, что при асинхронном обновлении, адаптер не подписывается на изменения дочерних групп, а значит при вызове `notify*` из этих групп он не узнает о том, что что-то изменилось и как следствие, например, разворачивание/сворачивание `ExpandableGroup` не будет работать. Объясняется отсутствие подписки тем, что с ней были утечки памяти.
Хороший поинт, спасибо. Правда, не очень понятно ожидаемое это поведение или нет.
К сожалению или к счастью, многие библиотеки сейчас переходят на AndroidX, и мы свои текущие проекты тоже стараяемся плавно переводить, пора уже этим озаботиться. А вот за то, что они наконец-то добавили асинхронный апдейт — спасибо, надо добавить информацию в статью.
Знаете, за то время, что использую RecyclerView и его товарищей из support библиотеки, пришел к выводу, что cделать что-либо серьёзное на их базе — занятие весьма нетривиальное, одних умных адаптеров будет мало. Например, если взять ваше приложение с уточками на базе Epoxy и скормить его systrace, а затем просто поскролить, получим много предупреждений о 'expensive measure/layout pass' (алерты 'Long View#draw()' в счет не берем, это отдельный разговор). Казалось бы, как это исправить: напишем полностью свой LayoutManager, откажемся от CardView (есть же nine-patch и аниматоры), сами view элементов сделаем offscreen (загрузка, разметка и пр. — все через runnable и их очередь), в общем, заоптимизируем RecyclerView по полной. И всё равно в логах systrace будет всплывать алерт с тэгом 'RV OnLayout' (тут надо сказать отдельное спасибо тем парням, которые писали метод dispatchLayout, а также 1,2 и 3). Про работу с фокусом (переходы вверх, вниз и т.п.) в пределах RecyclerView вообще молчу.
ps. А за Epoxy — спасибо, годная библиотека, взял на вооружение
Да, если уходить в оптимизации, то это действительно задачка не из легких. Нам не было особой необходимости это делать — достаточного тех решений, которые уже есть. Но в их кишки лезть всегда неприятно — чего стоит один ItemDecoration, а уж про LayoutManager вообще молчу.
Про работу с фокусом так вообще можно легенты слагать уже :) Но что поделать, когда тебе приходится рендерить формы — тут выбор невелик особо. Мне Epoxy нравится как раз тем, что они постарались учесть некоторые такие моменты, и это подкупает, несмотря на наличие кодогенерации.
Ага, спасибо. Как руки дойдут, обновлю статью!
А ещё сейчас появился MergeAdapter — в целом несколько помогает решить проблему когда куча разных типов ячеек в списке и разделить логику
Sign up to leave a comment.