В чем разница между закрытием или отменой диалога в Android?

194

Как гласит заголовок, в чем разница между закрытием или отменой диалога в Android?

Aal
источник

Ответы:

188

Как правило, диалоговое окно закрывается, когда его работа завершена и он удаляется с экрана. Диалог отменяется, когда пользователь хочет выйти из диалога и нажимает кнопку «Назад».

Например, у вас есть стандартный диалог Да / Нет на экране. Если пользователь нажимает «Нет», то диалоговое окно закрывается, и значение «Нет» возвращается вызывающей стороне. Если вместо выбора «Да» или «Нет» пользователь нажимает кнопку «Назад», чтобы выйти из диалогового окна, а не сделать выбор, тогда диалоговое окно отменяется и никакое значение не возвращается вызывающей стороне.

подветренный
источник
Спасибо за ответ. Я пытаюсь установить, что произойдет, если пользователь нажимает кнопку отмены на устройстве выбора даты. Сначала я попытался использовать прослушиватель dismiss, и это сработало, но также произошло, если пользователь выбрал время. Затем я попытался отменить прослушивание, и оно никогда не сработало, даже если я нажал кнопку отмены. Ты знаешь, что я должен делать?
Аал
2
Если вы используете DatePickerDialog, вы должны использовать OnDateSetListener, чтобы получать уведомления при изменении даты. Если кто-то нажмет кнопку отмены ... тогда он не будет вызван, и диалог исчезнет сам по себе. Для обычного использования DatePickerDialog вам не нужно устанавливать других слушателей.
Ли
К вашему сведению, кнопка «Назад» запускает и слушателя отмены, и слушателя отмены.
Городской
28

dismissэто то, что вы должны явно вызывать в своем коде, обычно для ответа на событие нажатия на кнопку в вашем коде Dialog. Если вы предпочитаете, вы можете позвонить dismissDialogв Activity, который, в свою очередь, позвонит dismissна Dialog.

cancelМетод выполняется только когда он явно вызывается в коде, или когда пользователь нажимает кнопку НАЗАД , когда ваш отменяемый Dialogоткрыт (как отмечено @Lee).

Если вы используете DatePicker, то все это еще так. Как сказал @Lee, DatePickerDialog.OnDateSetListenerпросто определяет, когда пользователь выбрал дату из DatePicker.

Android Developer Reference предоставляет больше информации о Dialogс.

hotshot309
источник
Вы также можете вызвать cancelметод. Есть два разных слушателя для диммирования и отмены.
creativecreatorormaybenot
12

DismissВызов dismiss удаляет диалог с экрана. Этот метод может быть безопасно вызван из любого потока. Обратите внимание, что вы не должны переопределять этот метод для очистки после закрытия диалогового окна, вместо этого реализуйте это в onStop .

CancelВызов отмены, отменяет диалог. По сути, это то же самое, что вызов dismiss () , но также вызовет ваш DialogInterface.OnCancelListener , если он зарегистрирован.

Hide Этот метод скрывает диалог, но не закрывает его.

А подробнее смотрите здесь

ucMedia
источник