expandablelistview

Пример создания ExpandableListView в Android

В этом уроке мы реализуем двухуровневый список ExpandableListView. Это своего рода меню из подменю в Android ListView

Краткий обзор ExpandableListView в Android

Двухуровневый список ExpandableListView представляет собой объект view, в котором каждый элемент списка содержит вложенный список. За работу списка отвечает адаптер ExpandableListViewAdapter, который загружает данные по каждому пункту и вложенному списку.

Давайте рассмотрим наиболее полезные методы, которые используются при работе с классом ExpandableListView:

  • Метод setChildIndicator(Drawable) используется для отображения индикатора возле каждого элемента списка.
  • Метод setGroupIndicator(Drawable) устанавливает индикатор возле каждого элемента, обозначая развернут он или свернут. Если группа пуста, то будет установлено состояние state_empty. Если группа развернута, будет установлено состояние state_expanded.
  • Метод getGroupView() возвращает view для группы элементов списка
  • Метод getChildView() возвращает view дочернего элемента списка

Для каждого элемента используется свой тип слушателя:

  • Интерфейс ExpandableListView.OnChildClickListener переопределяется для отслеживания нажатий на дочерние элементы раскрывающегося списка
  • Интерфейс ExpandableListView.OnGroupClickListener переопределяется для отслеживания нажатий на группу элементов
  • Интерфейс ExpandableListView.OnGroupCollapseListener используется для уведомления о том, что группа элементов была свернута
  • Интерфейс ExpandableListView.OnGroupExpandListener используется для уведомления о том, что группа элементов была развернута

Пример создания ExpandableListView. Практика

В нашем приложении будет использоваться всего 3 класса:

  1. Класс MainActivity — главная активити, в которой будет макет с ExpandableListView
  2. Класс ListData — класс, в котором будут храниться данные для представления в ExpandableListView. В реальных проектах источником данных конечно будет БД или же какие-то данные из сети.
  3. Класс ListAdapter — класс, который отвечает за управление данными из ListData в компоновке ExpandableListView.

Файл компоновки activity_main.xml будет выглядеть следующим образом:

Обратите внимание на использование атрибута android:indicatorLeft — он устанавливает индикатор списка (открыт он или нет) слева от названия пункта.

Также нам понадобится компоновка list_group.xml для дочерних элементов раскрывающегося списка каждого пункта:

Компоновка одного дочернего элемента будет следующей:

Теперь представим класс ListData, в котором будут храниться данные всего списка ExpandableListView:

Как видите, наш HashMap содержит в качестве ключей названия родительских элементов раскрывающегося списка, а в качестве значений — список дочерних элементов (тех элементов, которые будут показаны при нажатии на раскрывающийся родительский элемент списка).

Определяем в классе ListAdapter какие элементы будут показаны в GroupView, а какие в ChildView и как будет работать наш адаптер:

Ну и собираем это все в главном классе MainActivity, в котором будет отображен наш ExpandableListView:

Как видно и кода выше, мы реализовали описанные в начале статьи интерфейсы и показали элемент, на который нажал пользователь в сплывающем окне Toast.

Результат создания ExpandableListView в Android:

expandablelistview

Следите за обновлениями и подписывайтесь на новые статьи!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *