ListView и ArrayAdapter

Операционная система Android представляет широкую палитру элементов для работы со списками. Речь идет о таких виджетах, как ListView, GridView, Spinner. Эти элементы — наследники класса android.widget.AdapterView, которые способны выступать в качестве контейнеров для других элементов управления.

В процессе работы со списками разработчик имеет дело с 3-мя компонентами: 1) визуальный элемент (виджет), представляющий список на экране и отображающий данные (ListView, GridView); 2) источник данных. Это может быть массив, объект ArrayList, БД и так далее. В источнике данных находятся непосредственно отображаемые данные; 3) адаптер — специальный компонент, связывающий источник данных с виджетом списка.

Самым простым и распространенным элементов списка считают виджет ListView.

Давайте посмотрим на связь ListView с источником данных посредством класса ArrayAdapter — одного из таких адаптеров.

По сути, класс ArrayAdapter — это простейший адаптер, связывающий массив данных с набором компонентов TextView, из которых, например, и может состоять ListView. Таким образом, в нашем случае источник данных — массив объектов. При этом ArrayAdapter вызывает метод toString() у каждого объекта (что необходимо для приведения к строковому виду), а полученную строку устанавливает в TextView.

Вот как может выглядеть разметка приложения на примере:

Здесь тоже определен элемент ListView, который станет осуществлять вывод списка объектов. Давайте перейдем к коду activity и свяжем ListView посредством ArrayAdapter с некоторыми данными:

Тут мы сначала получаем по id элемент ListView, а потом создаем адаптер для него. Кстати, для создания адаптера использовался конструктор ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, countries).

Что здесь что: • this — это текущий объект activity; • android.R.layout.simple_list_item_1 — это файл разметки списка, причем этот файл фреймворк представляет по умолчанию. Файл располагается в папке Android SDK по пути platforms/[android-номер_версии]/data/res/layout. Если разработчика не будет удовлетворять стандартная разметка списка, можно создать свою, а потом в программном коде поменять идентификатор на id нужной разметки; • countries — массив данных. Совсем необязательно указывать именно массив — это, к примеру, может быть и список ArrayList<T>.

В конце, используя метод setAdapter(), следует установить для ListView адаптер.

Итоговый результат:

По материалам https://metanit.com/java/android/.