TGViewer
Android Live 🤖 Android Live 🤖 @android_live · 5.13K subscribers
Post #273 3.43K
​​Адаптируем RecyclerView
#разработка #библиотека

За последние несколько лет в Android поменялось много вещей. Но одна вещь остается неизменной: нам нужно отобразить пользователям данные в наиболее удобном для них виде. И если этих данных много, то мы используем список. Сегодня есть RecyclerView, которым мы отображаем списки уже несколько лет. Но так ли хорош RecyclerView или есть вещи, которые можно улучшить?

1) Adapter. Каждый RecyclerView для отображения данных использует адаптер. Если рассмотреть адаптер как паттерн, то это прослойка, которая позволяет интерфейсам уже созданных классов использоваться в других интерфейсах. Все адаптеры используют разные реализации ViewHolder, поэтому адаптер RecyclerView подходит под это определение. Но одной из наиболее известных ошибок, которая встречается в написании адаптеров является бизнес-логика внутри них. Надо помнить, что Adapter — это слой, который связывает логику отображения, и в нем нет места для бизнес-логики.

2) В любом адаптере надо переопределить много методов:
• установку данных в конструкторе или через сеттер;
• переопределить getItemCount();
• если есть несколько типов данных, то переопределить getItemViewType();
• переопределить onCreateViewHolder();
• ну и напоследок написать onBindViewHolder();

Если типов данных в списке много, то количество кода увеличивается. А с появлением нескольких адаптеров повторяющегося кода становится в разы больше.

3) DiffUtil — это класс, который решает проблему установки новых данных в адаптер, изменяя только те данные, которые нужно. Но недостаток в том же, что и во втором пункте: повторяющийся код. Для каждого Callback надо переопределить areItemsTheSame() и areContentsTheSame() и число этих методов растет в зависимости от числа типов элементов.

Этот список можно продолжать и дальше, ведь мы не касались обработки пустого списка, пагинации, выбора данных и прочих распространенных вещей.

Для решения этих и других проблему, рекомендую библиотеку OneAdapter, которая убирает большинство из этих недостатков. В ее основе лежит подход в создании модулей для биндинга ViewHolder, кликов, пагинации. Подробнее о библиотеке можно почитать в этой статье.
  • 👍 1
More from @android_live
  1. Oct 6, 2026Git --delete-merged На днях узнал про любопытную команду в Git — --delete-merged . Суть пр…
  2. Oct 5, 2026Почему Android-эмулятор жрёт 8 ГБ? На днях попался репозиторий с CLI-тулзой, которая обеща…
  3. Sep 29, 2026Post #1130
  4. Sep 29, 2026На днях попалась вакансия мечты Вроде всё начинается как неплохо: удалёнка, Kotlin/Jetpack…
  5. Sep 28, 2026На днях ревьювил код, связанный с копированием в буфер обмена И заметил, что многие прилож…
  6. Sep 26, 2026AirDrop на Android, похоже, уже есть на нескольких моделях Android Но, оказывается, всё эт…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →