- Полный список
- Немного про Context
- public ArrayAdapter (Context context, int textViewResourceId, T[] objects)
- Android Studio Listview
- ListView: что это
- Адаптеры – заполнение списка данными
- Пользовательская разметка
- Динамическое заполнение списка
- Прослушивание событий элемента ListView
- Программное нажатие на элемент списка
- ListView не реагирует на щелчки
- Настраиваем внешний вид ListView
- Подсветка нажатий
- Пользовательский селектор
- Множественный выбор
- Кнопка под списком
- Плавная прокрутка в начало списка или любую позицию
- Настраиваем прокрутку
- ListActivity
- Настройка цвета при достижении края прокрутки
Полный список
— используем ListView для построения списка
Перед тем, как начать говорить про компонент ListView, предлагаю вспомнить еще раз прошлый урок и механизм построения списка, который мы там использовали. Мы перебирали массив данных, в каждой итерации создавали пункт списка, заполняли его данными и помещали в список.
При создании ListView создавать пункты за нас будет адаптер. Адаптеру нужны от нас данные и layout-ресурс пункта списка. Далее мы присваиваем адаптер списку ListView. Список при построении запрашивает у адаптера пункты, адаптер их создает (используя данные и layout) и возвращает списку. В итоге мы видим готовый список.
Есть различные типы списков и адаптеров. Мы пока что рассмотрим простейший вариант.
Project name: P0421_SimpleList
Build Target: Android 2.3.3
Application name: SimpleList
Package name: ru.startandroid.develop.p0421simplelist
Create Activity: MainActivity
Открываем main.xml и добавим на экран компонент ListView (вкладка Composite):
ListView – это и есть компонент списка.
Теперь надо создать адаптер. Открываем MainActivity.java и пишем:
Вы не поверите, но это весь код, необходимый для создания списка )
В качестве данных используем массив имен. В onCreate мы находим список, создаем адаптер и присваиваем адаптер списку. Давайте разберемся, как создали адаптер.
и передали ему следующие параметры:
this – контекст
android.R.layout.simple_list_item_1 – это системный layout-файл, который представляет собой TextView
names – массив данных, которые мы хотим вывести в список
Мы можем посмотреть содержимое использованного simple_list_item_1. Для этого в вашем проекте найдите пункт Android 2.3.3., раскройте его, и раскройте android.jar
Проматывайте в самый низ и открывайте res.layout.
И внутри находим используемый нами simple_list_item_1
Двойной клик на него и смотрим содержимое:
Обычный TextView с набором параметров.
Когда список при формировании запрашивает очередной пункт, адаптер берет этот Layout-ресурс simple_list_item_1, прогоняет его через LayoutInflater и получает View, преобразует View к TextView, присваивает ему текст из массива данных и отдает списку.
Все сохраним и запустим. Видим список из наших данных.
Использование системного layout-ресурса simple_list_item_1 хорошо тем, что нам не надо самим layout рисовать. Однако, если нас не устраивает то, как выглядит список с использованием simple_list_item_1 в качестве пункта списка, мы можем создать свой layout-ресурс.
Создадим layout-файл my_list_item.xml в папке res/layout нашего проекта:
TextView с указанием цвета и размера шрифта, выравнивания текста и отступов.
Изменим существующий код, укажем адаптеру наш созданный layout-ресурс my_list_item:
Теперь адаптер будет использовать его при создании пунктов списка.
Все сохраним и запустим. Видим наш зеленый список:
В layout-ресурсе для пункта списка вместо TextView вы можете использовать какой-нибудь его производный класс – например Button. Главное, чтобы объект прошел преобразование к TextView. Адаптер присвоит ему текст методом setText и отдаст списку.
Немного про Context
На одном из прошлых уроков я говорил, что Context (контекст) используется для доступа к базовым функциям приложения. В этом уроке у нас получилось хорошее подтверждение этим словам.
ArrаyAdapter использует LayoutInflater, чтобы конвертнуть layout-ресурс в View. Но получение объекта LayoutInflater – это одна из базовых функций и она недоступна для класса ArrаyAdapter. Поэтому мы в ArrаyAdapter в качестве контекста передаем ссылку на Activity (Activity имеет доступ к базовым функциям через восходящую иерархию классов). А класс ArrayAdapter внутри себя использует переданный ему контекст, чтобы вызвать LayoutInflater. Без контекста он не смог бы это сделать.
На следующем уроке:
— используем список ListView для одиночного и множественного выбора элементов
public ArrayAdapter (Context context, int textViewResourceId, T[] objects)
Присоединяйтесь к нам в Telegram:
— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.
— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование
— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня
— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме
Источник
Android Studio Listview
Ни одно приложение, запрашивающее набор данных и возвращающее результаты, не обходится без отображения списка. Возьмем мессенджер или контактную книгу, в них контакты отображаются в виде списка. В Android такие прокручиваемые списки создаются и оформляются виджетом ListView. Работать с listview в андроидстудио удобней всего. Что такое androidstudio, вы можете узнать, перейдя по ссылке.
ListView: что это
Android ListView – способ представления элементов, в котором результаты отображаются в виде списка с вертикальной прокруткой. Функционирует androidstudiolist по следующему принципу – адаптер извлекает из источника содержимое и автоматически вставляет в androidstudio список.
Источником данных выступают базы данных и массивы. Можно создать следующие андроидстудио виды списков: с собственной разметкой, динамически заполняющиеся, androidstudiolistview многоуровневый, с элементами прослушивания событий и т.д.
ListView на примере телефонной книги
Адаптеры – заполнение списка данными
В аndroidstudiolistview оформление списка и его заполнение происходит благодаря «адаптерам». Основное их задание — связь информации с перечнем. В ОС Андроид работать с ListView можно с помощью адаптеров: первый –ArrayAdapter, второй – CursorAdapter. Второй управляет данными из базы данных. ArrayAdapter регулирует содержимое перечней и массивов.
Адаптеры действуют в качестве посредников между источником информации и ListView
За создание индивидуального адаптера отвечает абстрактный класс BaseAdapter. Индивидуальные адаптеры могут понадобиться, когда требуется организовать недостающий контроль над представлениями или управление сведениями. Также в индивидуальном адаптере предусматривают компоненты, отвечающие за кэширование, повышающие производительность функционала.
В качестве основных приемов адаптера выступают getCount() и getView(). С помощью первого метода можно узнать, сколько объектов будет выводиться. Второй метод отвечает за создание элементов списка. Вызывается getView() для каждого элемента, определяя, что отображать нужно, а что нет. Повторное использование существующих элементов можно выставить с помощью параметра convertView, который содержится в getView().
Пользовательская разметка
Для придания оригинальности списку нужно системную разметку заменить на пользовательскую, но для этого ее необходимо создать и подключить. Перейдите в категорию res/layout/ и создайте в категории файл под названием list_item.xml. Listviewandroidstudio пример с собственной разметкой:
Выставление цвета, отступа, размера шрифта и т.д.
Когда необходимо добиться изменения в androidstudiolistview оформление, к примеру, выставить цвет при нажатии, то для родительского компонента прописывают следующую композицию знаков – android:background=»?android:attr/ activatedBackgroundIndicator». В TextView возможна настройка практически всех параметров. Единственным исключением является характеристика Text, так как ее указывают в виде компонента ListView автоматически. Для подключения своей разметки останется изменить одну строчку в коде, вместо системной разметки поставить свою.
Подключение собственной разметки
Динамическое заполнение списка
Чтобы заполнить список, пользователю следует внести в пустой список новые компоненты. К примеру, расположим на экране поле, в которое в дальнейшем пользователь будет вводить известные ему города, набирая текст с клавиатуры. При нажатии кнопки Enter введенное название города сразу фиксируется в динамическом списке. За моментальное обновление списка отвечает адаптер, а за хранение данных – массив.
Пример кода заполнения пользователем списка городов
Собственно говоря, данный код можно взять за основу для чата. Пользователь пишет текст, который потом отображается в списке. Чтобы получить полноценное приложение, необходимо настроить запись текста от другого абонента и добавление в этот же список.
Реализация кода заполнения пользователем списка городов
Прослушивание событий элемента ListView
Компонент ListView генерирует множество событий, на некоторые из них необходимо реагировать, в частности, это события, возникающие после клика на объекте из списка. Обеспечивают эти цели такие методы: OnItemClick и setOnItemClickListener.
Все данные, необходимые, чтобы определить компонент, нажатый в перечне, передаются именно в метод onItemClick() . В примере ниже реализовано всплывающее сообщение с текстовой информацией, которое возникает после нажатия на любой раздел из перечня.
Код события: нажатие на элемент списка
Программное нажатие на элемент списка
Под программным нажатием подразумевается создание кнопки и задание события, которое будет осуществлено после клика по кнопке. Обычно кодировка выходит немного громоздкой, однако, в целом, работает без багов.
Пример кода для щелчка
ListView не реагирует на щелчки
Бывают такие случаи, когда после щелчка на категориях меню ничего не происходит, даже несмотря на то, что в коде все необходимые методы стоят, и визуально ошибок не видно. Что предпринять?
Первое – проверить, нет ли в компоненте перечня CheckBox. Если содержит, то глюк заключается в нем, ведь у него имеется индивидуальный слушатель щелчков. Исправить такую ситуацию довольно легко, необходимо избавиться от фокуса.
Также иногда помогает перемещение метода OnItemClickListener. Только делать это нужно перед тем, как устанавливается адаптер.
Второе – если в компоненте перечня содержится TextView и используется параметр android:inputType=»textMultiLine», его меняют на android:minLines/android:maxLines. Не помешает проверить наличие характеристики android:autoLink, если таков есть, то его следует удалить.
Если проблемы остались, значит, причина в ImageButton. Установите фокус в false.
Заставляем ListView реагировать на нажатия
Настраиваем внешний вид ListView
Чтобы список выглядел более привлекательно, необходимо воспользоваться встроенными атрибутами. Для задания высоты разделителя используется атрибут dividerHeight. Для задания самого графического разделителя используется атрибут divider.
В качестве разделителя можно установить не только цвет, но и картинку. Загружать следует картинки формата png и фиксировать файл в качестве drawable-ресурса. Таким образом можно избежать множества ошибок.
Пример настройки внешнего вида списка
Подсветка нажатий
Для начала необходимо создать в папке Resources > drawable файл ViewCellBackground.xml, который будет определять фигуры с цветами для состояния по умолчанию, а также состояния «нажатого» элемента. В файл вписываем строчку:
После для этого класса реализуем пользовательский рендерер, для этого устанавливаем фоновый ресурс:
Если для существующего UIView не работает установка фонового цвета, то можно попробовать после установки цвета фона вызвать SetNeedsLayout.
Результат выполнения кода
Пользовательский селектор
Автоматический элемент перечня при выборе выделен цветом. Выделение можно сделать более оригинальным. Воспользуйтесь параметром android:listSelector. Все что необходимо сделать, это подобрать подходящую селектору текстуру и привязать ее через ресурс.
Для подсвечивания элемента списка сразу после запуска приложения нужно использовать связку следующих методов:
Применение пользовательского селектора
Множественный выбор
Выборку сразу нескольких пунктов можно настроить через два основных способа установки. Первый – через метод setChoiceMode(ListView.CHOICE_MODE_MULTIPLE). Второй – с помощью параметров ChoiceMode. Установите значение multiplyChoice, атрибут android:choiceMode=»multipleChoice». Посмотрев tutorial, вы сможете с легкостью разобраться с этим моментом.
Кнопка под списком
Для размещения под перечнем клавиши, на которую не будет влиять количество пунктов в androidstudiolistview, воспользуйтесь layout_weight.
Листинг размещения кнопки под списком
Плавная прокрутка в начало списка или любую позицию
Для реализации плавной прокрутки применяется метод smoothScrollToPosition(), в котором для прокрутки указывается номер позиции. Перед использованием данного метода следует учесть, что в списках с большим количеством элементов, более сотни, процесс прокрутки может затянуться. Так что лучше этот способ отложить для более мелких списков.
Пример кода плавной прокрутки в начало списка
Настраиваем прокрутку
Полосы прокрутки можно настроить по своему усмотрению. Для этих целей в ListView имеются два атрибута, которые также можно применить к полосам EditText и ScrollView.
Атрибуты, отвечающие за полосу прокрутки
ListActivity
ListActivityнезаменим для упрощенного доступа к компонентам перечня. Это системный раздел, который разработан на основе Activity для эффективного взаимодействия с перечнями. Создать перечни не составит особого труда.
Для этого сначала нужно сделать новый проект. После необходимо найти и удалить activity_main.xml, так как ListActivity, не нуждается в дополнительной разметке. Кликаем по java-файлу и вручную стираем setContentView (R.layout.activity_main). Далее следует известить систему о том, что будет использован экран с перечнем.
Внесите изменения в ячейку publicclass Ваше Название ActivityextendsAppCompatActivity, вместо AppCompatActivity пишем ListActivity. В import вы увидите две строчки, одну из них можно стереть.
Удаляемая строка
Следующим шагом является подготовка сведения для перечня, для их дальнейшего отображения. В качестве места хранения данных выбираем массив и переходим к его формированию.
Формирование и заполнение массива
Переходим непосредственно к созданию экрана, куда включен перечень, а также самих слов для этого перечня. Справиться с этой задачей поможет адаптер данных.
Определение адаптера данных для работы с массивами строк
Далее предлагаем адаптеру только что сформированный массив, ресурсный идентификатор и ListActivity. Последний выполняет роль текущего контекста. Завершающий этап – подключение.
Работа с адаптером
Подключение адаптера
Настройка цвета при достижении края прокрутки
colorEdgeEffect – атрибут, отвечающий за вывод цветового эффекта при достижении ползунка прокрутки конца формы. В старых версиях андроид он не будет корректно работать.
Код вывода цветового эффекта при достижении края прокрутки
Источник