@orbit070

Как удалять/закрывать диалоговые окна?

Здравствуйте.

1. Есть диалоговое окно, которое унаследовано от DialogFragment. Я его отображаю с помощью show(). Если пользователь в нем нажимает на нужную мне кнопку, то я выполняю нужные действия. Если нажимает назад или на пустую область экрана, я ничего не делаю.

2. Есть диалоговое окно, которое унаследовано от Dialog(в нем я отображаю ProgressBar). Кнопка назад или нажатие на пустую область экрана залочены. Отображаю с помощью show(), скрываю с помощью hide().

Первый вопрос: если в первом случае пользователь нажимает кнопку назад или на пустую область экрана, то автоматически срабатывает метод hide(), который я во втором случае вызываю сам?

Второй вопрос: вызова метода hide() достаточно для полного и правильного закрытия диалогового окна? Я натыкался на метод dismiss но не очень хорошо понимаю, когда его нужно вызывать и нужно ли вообще? Буду очень благодарен за объяснение, спасибо.
  • Вопрос задан
  • 66 просмотров
Решения вопроса 1
thelongrunsmoke
@thelongrunsmoke
Программист
1) Когда пользователь закрывает диалог, тапнув в любом месте, вызывается cancel(), а за ним dismiss(), hide() не вызывается.
2) Нет. Метод hide() только скрывает диалог, чтобы его можно было снова показать, он остаётся в памяти. Если диалог более не требуется, вызывайте dismiss(), чтобы корректно его уничтожить, или cancel(), если требуется предварительно вызвать обработчик повешенный на onCancel().

Коротко. Если сделать диалог hide(), то его можно show(); если сделать dismiss(), то show() вызовет ошибку.

Подразумевается, что диалог - одноразовая сущность, создаётся, показывается и уничтожается, после взаимодействия с пользователем. Основное кейс для hide() - отображение прогресса длительных процессов, когда нужно позволить пользователю скрыть диалог.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
danial72
@danial72
flutter dart.
1) если правильно помню, то да вызывается hide
2) у диалогового окна есть 3 исхода : человек подтверждает действие описание и пожалуй, человек отказывается (тот самый dismiss) и человек закрывает модалку без решения. Dismiss это про выбор действия человеком на самом модальном окне
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы