Skip to main content

Построение экранов вертикальными списками

В мобильных приложениях наиболее распространен интерфейс с вертикальной прокруткой (scroll) экрана. Это связано с форм-фактором устройств и количеством контента, который нужно показывать пользователю.

Для реализации таких экранов используются два подхода:

  • RecyclerView/UITableView с переиспользованием элементов при прокрутке - этот подход используется в любой ленте или списке однотипных элементов;
  • ScrollView/UIScrollView с ручной версткой содержимого, которое должно быть в scroll. Данный подход используется чаще всего на экранах с где контент не является набором однотипных элементов, но не влезает на экран устройства полностью.
RecyclerView / UITableViewScrollView / UIScrollView
listviewscrollview

Первый вариант экранов, с однотипными списками элементов, достаточно очевидно как можно использовать с общей логикой - собираем список с данными в ViewModel, а на UI передаем эти данные в Adapter/DataSource.

Для второго же предполагается много ручной работы по верстке UI под конкретное расположение элементов и выдачу данных из ViewModel отдельными полями.

Мы используем подход по построению практически любого экрана с вертикальной прокруткой через первый вариант - RecyclerView/UITableView. Аналогичный подход используют Airbnb в своей библиотеке epoxy.

Это позволяет нам контролировать содержимое экрана из общей логики, частично управляя и расположением и видимостью элементов на UI. По сути экран бьется на строки - вертикальные блоки, которые мы назвали Unit (элемент). Разберем приведенный выше пример, вот как можно разбить на блоки:

units-1units-2

moko-units

Библиотека moko-units позволяет нам реализовать описанный выше подход с управлением составом отображаемых на UI блоков из общего кода. Со стороны каждой платформы интеграция очень простая и стандартная. Вся основная работа состоит в том, чтобы сверстать все блоки и прописать логику их создания из sealed interface находящегося в общем коде.

Посмотрите видео материал с подробным пояснением причин обобщения реализации между платформами и принципами работы.

Практическое задание

  • Используйте проект, готовый после раздела Ресурсы на iOS
  • Подключите moko-units
  • Реализуйте логику построения списков в общем коде (только для списка репозиториев)
  • iOS и Android приложения должны работать