Главная » Разработка для Android » Отображение диалоговых окон и управление ими

0

Вместо того чтобы создавать новые экземпляры диалоговых окон каж- дый раз, когда это необходимо, можно использовать обработчики событий onCreateDialog и onPrepareDialog, предоставляемые Android. Вызывая их внутри класса Активности, можно управлять диалоговыми окнами, сохраняя их экземпляры.

Переопределив обработчик  onCreateDialog, укажите  конкретные диа- логи, которые будут созданы при вызове метода showDialog. Как показано в листинге 5.29, переопределенный метод содержит оператор switch, позво- ляющий определить, какое именно диалоговое окно следует отобразить.

Листинг 5.29. Использование обработчика  onCreateDialog

static final private int TIME_DIALOG = 1;

@Override

public Dialog onCreateDialog(int id) {

switch(id) {

case (TIME_DIALOG) :

AlertDialog.Builder timeDialog = new AlertDialog.Builder(this); timeDialog.setTitle("The Current Time Is…"); timeDialog.setMessage("Now");

return timeDialog.create();

}

return null;

}

После начального создания при каждом вызове метода showDialog будет срабатывать  обработчик  onPrepareDialog. Переопределив этот метод, вы можете изменять  диалоговое  окно при каждом его выводе на экран. Это позволит привнести контекст в любое из отображаемых значений. В листин- ге 5.30 диалог, созданный  выше, выводит сообщение о текущем времени.

Листинг 5.30. Использование обработчика  onPrepareDialog

@Override

public void onPrepareDialog(int id, Dialog dialog) {

switch(id) {

case (TIME_DIALOG) :

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");

Date currentTime = new Date(java.lang.System.currentTimeMillis()); String dateString = sdf.format(currentTime);

AlertDialog timeDialog = (AlertDialog)dialog;

timeDialog.setMessage(dateString);

break;

}

}

Переопределив эти обработчики,  вы можете отображать  диалоги с по- мощью вызова метода showDialog, как показано ниже. Передайте в качестве параметра  идентификатор диалога, который  вы хотите вывести  на экран, и Android сам создаст его (если нужно) и подготовит к отображению:

showDialog(TIME_DIALOG);

Кроме улучшенного  механизма управления ресурсами этот подход по- зволяет  вашей Активности контролировать целостность  информации о со- стоянии  диалогов. Любой выбор элементов  или набор текста в поле ввода сохранятся для каждого экземпляра диалогового окна независимо  от того, сколько раз они будут отображаться на экране.

Источник: Майер P. Android 2 : программирование приложений для планшетных компьютеров и смартфонов : [пер. с англ. ] / Рето Майер. — М. : Эксмо, 2011. — 672 с. — (Мировой компьютерный бестселлер).

По теме:

  • Комментарии