@orbit070

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

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

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

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

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

Второй вопрос: вызова метода hide() достаточно для полного и правильного закрытия диалогового окна? Я натыкался на метод dismiss но не очень хорошо понимаю, когда его нужно вызывать и нужно ли вообще? Буду очень благодарен за объяснение, спасибо.
  • Вопрос задан
  • 58 просмотров
Решения вопроса 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 это про выбор действия человеком на самом модальном окне
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы