13. Диалоговые окна
Диалоговые окна требуют от пользователя внимания и ввода
данных. Обычно они используются для принятия решений или
отображения важной информации. В
этой главе мы добавим
диалоговое окно, в котором пользователь может изменить дату
преступления.
При нажатии кнопки даты в
CrimeFragment
открывается
диалоговое окно (рис. 13.1).
Рис. 13.1. Диалоговое окно выбора даты
Диалоговое окно, показанное на рис. 13.1, является
экземпляром
DatePickerDialog
подкласса
AlertDialog
.
DatePickerDialog
отображает пользователю запрос на выбор
даты и имеет интерфейс слушателя,
который вы можете
реализовать для получения результата выбора.
AlertDialog
является универсальным подклассом
Dialog
, который вы
будете использовать чаще всего для создания большего
количества пользовательских диалоговых окон.
Создание экземпляра DialogFragment
При
использовании объекта
AlertDialog
обычно удобно
упаковывать его в
экземпляр
DialogFragment
подкласса
Fragment
. Вообще говоря, экземпляр
AlertDialog
может
отображаться и без
DialogFragment
, но Android так поступать
не
рекомендует.
Управление
DatePickerDialog
из
FragmentManager
открывает больше возможностей для его
отображения.
Кроме того, «минимальный» экземпляр
DatePickerDialog
исчезнет при повороте устройства. С другой стороны, если
экземпляр
DatePickerDialog
упакован во фрагмент, после
поворота диалоговое окно будет создано заново и появится на
экране.
Для приложения CriminalIntent мы
создадим подкласс
DialogFragment
с именем
DatePickerFragment
. В коде
DatePickerFragment
создается и настраивается экземпляр
DatePickerDialog
. В
качестве хоста
DatePickerFragment
используется экземпляр
MainActivity
.
На рис. 13.2 изображена схема этих отношений.
Наши первоочередные задачи:
• создание класса
DatePickerFragment
;
• построение
DatePickerFragment
;
• вывод диалогового окна на экран с использованием
FragmentManager
.
Ниже в этой главе мы организуем передачу необходимых
данных между
CrimeFragment
и
DatePickerFragment
.
Создайте класс
DatePickerFragment
и назначьте
DialogFragment
его суперклассом.
Обязательно выберите
Jetpack-версию
DialogFragment
из библиотеки поддержки:
androidx.fragment.app.DialogFragment
.
Класс
DialogFragment
содержит следующую функцию:
onCreateDialog(savedInstanceState:
Bundle?):
Dialog
Рис. 13.2. Диаграмма объектов для двух фрагментов с хостом MainActivity
Экземпляр
FragmentManager
хост-activity вызывает эту
функцию в процессе вывода
DialogFragment
на экран.
Добавьте в файл
DatePickerFragment.kt
реализацию
onCreateDialog(Bundle?)
,
которая
создает
DatePickerDialog
, инициализируемый с текущей датой (лис-
тинг 13.1).
Do'stlaringiz bilan baham: