Как стать автором
Обновить

RecyclerView.ItemDecoration: используем по максимуму

Время на прочтение 10 мин
Количество просмотров 34K
Всего голосов 12: ↑12 и ↓0 +12
Комментарии 11

Комментарии 11

Было бы круто если показали бы сделать плавующую дату (как у телеграма).
Да, сделать стикихедеры тоже собираюсь.
Готово, обновил статью.

Вот только для реализации как в Телеграмм этого не достаточно т.к. декораторы невозможно нормально анимировать. Придется делать комбинацию со стики хедерами и вьюхой поверх RecyclyView которая будет исчезать при отсутствии скролла. Вроде в телеге как раз так и сделано

Да, все верно, если надо с fade анимацией убирать дату то надо вьюху сверху положить. А анимация стикихедера делается просто, без дополнительной верстки.

Когда я делал декораторы, у которых логика зависела от соседних ячеек, то все ломалось при использовании DiffUtils. Например, возьмем Ваш кейс с ячейками a. Теперь через DiffUtils удалим последнюю ячейку в блоке. Поскольку изменилась только одна ячейка (последняя), то для двух предыдущих перерисовка вызвана не будет, от чего вторая ячейка (которая стала последней в блоке) останется без скругленных краев. Нужно в таком случае на любые изменения в списке вызывать invalidateItemDecorations(). Есть ли какой то другой способ?

Хороший вопрос. Иногда бывают ситуации когда надо дополнительно вызывать invalidateItemDecorations(), чтобы всё корректно отрисовалось. EasyAdapter использует DiffUtill для расчетов и у меня такой кейс не воспроизвелся.
Вот записал видео
Чтобы было всё честно, добавляются и удаляются одинаковые элементы, с одинаковыми id.
www.dropbox.com/s/0k1jibhzx6n6qpr/case_delete_last_add_last.mp4?dl=0

Точно такая же проблема при использовании diffutils и декораторов, из-за этого от них отказался

Правда очень странно, у нас таких проблем не было еще.

Тоже недавно столкнулся. Надо было через декоратор добавлять последнему элементу отступ снизу 16dp. Если новый элемент идёт в конец, то и коллбек отрисовки сработает только для него. Вот и получаем отступ между последним и предпоследним, которого быть не должно.

Зарегистрируйтесь на Хабре , чтобы оставить комментарий