1. Использование списков в Android. Класс адаптера
Рассмотрим, зачем нужны списки в Android и как они используются в различных приложениях
Зачем нужны виджеты списков в Android
Исходя из своего названия, виджеты списков предназначены для вывода различной информации в виде списков различных форм и видов. Причем речь идет не только о банальном вертикальном списке, но и об отображении данных в виде сетки, выпадающего списка, а также различные гибкие сетки.
Виджеты списков, так или иначе, присутствуют практически в каждом мобильном приложении, поэтому архитектура ОС Android позволяет очень гибко настраивать как структуру, так и внешний вид этих элементов, позволяя превратить банальный перечень различных элементов в дизайнерские шедевры.
Еще одной важной особенностью подобных элементов является динамическое изменение содержания и внешнего вида элементов списка. Во время работы программы виджеты могут менять количество элементов в списке, их содержимое, динамические добавлять новые элементы и так далее.
На данный момент базовым классом для создания подобных списков является виджет RecyclerView
. Однако, для лучшего понимания как устроены подобные виджеты и как их программировать для своих нужны, мы сначала рассмотрим виджет ListView
, после чего перейдем к рассмотрению текущего спискового виджета RecyclerView
.
Так как виджеты списков (и не только они) в своей работе используют специальные вспомогательные классы, которые называются адаптерами, сначала рассмотрим понятие адаптера применительно к виджетам списка.
Использование адаптеров в виджетах списка
Для того, чтобы обеспечить гибкость в настройке и в отображении списковых элементов, в Android используется разделение обязанностей между классами. Грубо говоря, класс ListView
или RecyclerView
отвечает за технические моменты, такие как реализация прокрутки, отрисовка всего списка, получение и потерю фокуса и другие важные, но скрытые от пользователя вещи, тогда как за данные, которые нужно отобразить в списке и за внешний вид одного элемента списка отвечает другой вспомогательный класс.
Таким «вспомогательным» классом для виджетов списка является адаптер (adapter, название перешло от паттерна проектирования «адаптер», подробнее про паттерн – http://myrusakov.ru/php-pattern-adapter.html, http://www.javenue.info/post/63).
Адаптер работает следующим образом: Адаптеру нужны данные и макет пункта списка. Далее, мы передаем адаптер виджету списка. Списковый элемент, при построении списка, запрашивает у адаптера пункты списка, адаптер их создает (используя данные, макет и объект LayoutInflater
) и возвращает списку. В итоге, на экран выводится готовый список.
Таким образом, адаптер является своего рода посредником между данными и виджетом списка. Применительно к виджету ListView
, адаптер определяет:
какие данные, и в каком виде выводить
как будет выглядеть один элемент списка.
Last updated