Search Header Logo
5 урок Андроид

5 урок Андроид

Assessment

Presentation

Education

University

Practice Problem

Hard

Created by

Еркебулан Жунусов

Used 1+ times

FREE Resource

10 Slides • 0 Questions

1

Практическая работа на тему Использование LayoutInflater для создания списка. Список - ListView. Одиночный и множественный выбор в ListView. События в ListView. Список-дерево ExpandableListView. События ExpandableListView.

media

Цель работы

Научиться использовать LayoutInflater для создания списка в ListView, а также работать с одиночным и множественным выбором элементов. Ознакомиться с использованием ExpandableListView для создания древовидного списка.

2

Разметка activity_main.xml

  • LinearLayout – это контейнер для размещения элементов в линейном порядке (по вертикали или горизонтали).

  • xmlns:android="http://schemas.android.com/apk/res/android" – это пространство имен, необходимое для использования стандартных атрибутов Android в XML.

  • android:layout_width="match_parent" – контейнер будет занимать всю ширину экрана.

  • android:layout_height="match_parent" – контейнер займет всю высоту экрана.

  • android:orientation="vertical" – элементы внутри LinearLayout будут расположены вертикально.

3

Этот код создает экран, на котором есть вертикальный контейнер LinearLayout, содержащий ListView. ListView позволяет пользователю выбирать один элемент, что полезно для списков с выбором (например, настройка режима приложения). 🚀

  • ListView – это виджет для отображения списка элементов, например, списка имен или товаров.

  • android:id="@+id/listView" – идентификатор списка, по которому мы можем обращаться к нему в коде Kotlin.

  • android:layout_width="match_parent" – ListView займет всю ширину экрана.

  • android:layout_height="wrap_content" – высота списка будет зависеть от его содержимого.

  • android:choiceMode="singleChoice" – позволяет выбирать только один элемент списка (используется, например, в радиокнопках).

4

Создание адаптера ListView

Создадим list_item.xml для элементов списка:

  • TextView — это стандартный виджет Android, который используется для отображения текста на экране.

  • xmlns:android="http://schemas.android.com/apk/res/android" — это пространство имен XML, необходимое для корректной работы атрибутов android:.

  • layout_width="match_parent" — ширина TextView будет равна ширине родительского контейнера.

  • layout_height="wrap_content" — высота TextView будет автоматически подстраиваться под его содержимое.

  • padding="16dp" — задает отступы внутри TextView, чтобы текст не прилипал к краям.

  • textSize="18sp" — размер текста составляет 18 SP (Scale-independent Pixels), что учитывает настройки размера шрифта в системе.

  • id="@+id/textItem" — задает уникальный идентификатор textItem, по которому можно обращаться к этому TextView в коде на Java/Kotlin.

5

Класс адаптера MyAdapter.kt:

  • MyAdapter наследуется от ArrayAdapter<String>, который является стандартным адаптером для работы со списками строк.

  • В конструктор передаются:

    • context — контекст приложения или активности.

    • items — список строк, которые нужно отобразить.

  • Вызов конструктора ArrayAdapter<String>(context, R.layout.list_item, items) передает в него макет R.layout.list_item, который будет использоваться для каждого элемента списка.

media
media
media

6

val view = convertView ?: LayoutInflater.from(context).inflate(R.layout.list_item, parent, false)
Если convertView не равен null, то используется старая View, иначе создается новая из R.layout.list_item с помощью LayoutInflater.

media
media
media
media

7

media
media
media
media

return view

  • Возвращаем View, которая будет отображаться в ListView.

8

val listView: ListView = findViewById(R.id.listView)

val items = listOf("Элемент 1", "Элемент 2", "Элемент 3", "Элемент 4")

val adapter = MyAdapter(this, items)

listView.adapter = adapter

listView.setOnItemClickListener { , , position, _ ->

Toast.makeText(this, "Вы выбрали: ${items[position]}", Toast.LENGTH_SHORT).show()

Настройка ListView в MainActivity

9

media
media

10

media
media

​class ExpandableListAdapter(private val context: Context, private val header: List<String>, private val body: HashMap<String, List<String>>) : BaseExpandableListAdapter() {

override fun getGroupCount() = header.size

override fun getChildrenCount(groupPosition: Int) = body[header[groupPosition]]!!.size

override fun getGroup(groupPosition: Int) = header[groupPosition]

override fun getChild(groupPosition: Int, childPosition: Int) = body[header[groupPosition]]!![childPosition]

override fun getGroupId(groupPosition: Int) = groupPosition.toLong()

override fun getChildId(groupPosition: Int, childPosition: Int) = childPosition.toLong()

override fun hasStableIds() = false

override fun getGroupView(groupPosition: Int, isExpanded: Boolean, convertView: View?, parent: ViewGroup?): View {

val view = convertView ?: LayoutInflater.from(context).inflate(android.R.layout.simple_expandable_list_item_1, parent, false)

val textView = view.findViewById<TextView>(android.R.id.text1)

textView.text = getGroup(groupPosition) as String

return view

}

override fun getChildView(groupPosition: Int, childPosition: Int, isLastChild: Boolean, convertView: View?, parent: ViewGroup?): View {

val view = convertView ?: LayoutInflater.from(context).inflate(android.R.layout.simple_list_item_1, parent, false)

val textView = view.findViewById<TextView>(android.R.id.text1)

textView.text = getChild(groupPosition, childPosition) as String

return view

}

override fun isChildSelectable(groupPosition: Int, childPosition: Int) = true

}

Практическая работа на тему Использование LayoutInflater для создания списка. Список - ListView. Одиночный и множественный выбор в ListView. События в ListView. Список-дерево ExpandableListView. События ExpandableListView.

media

Цель работы

Научиться использовать LayoutInflater для создания списка в ListView, а также работать с одиночным и множественным выбором элементов. Ознакомиться с использованием ExpandableListView для создания древовидного списка.

Show answer

Auto Play

Slide 1 / 10

SLIDE