tl; dr: Правильный способ закрыть a DialogFragment
- использовать dismiss()
непосредственно в DialogFragment .
Подробности : в документации DialogFragment говорится
Управление диалоговым окном (принятие решения о том, когда его показать, скрыть или закрыть) должно осуществляться через API, а не с помощью прямых вызовов диалогового окна.
Таким образом, вы не должны использовать getDialog().dismiss()
, так как это вызовет dismiss()
диалоговое окно . Вместо этого вы должны использовать dismiss()
метод самого DialogFragment:
общественная недействительность увольнение ()
Закройте фрагмент и его диалог. Если фрагмент был добавлен в задний стек, все состояния заднего стека до этой записи включительно будут извлечены. В противном случае будет зафиксирована новая транзакция для удаления фрагмента.
Как видите, это касается не только закрытия диалогового окна, но и обработки транзакций фрагментов, участвующих в процессе.
Вам нужно использовать только в том onStop
случае, если вы явно создали какие-либо ресурсы, требующие ручной очистки (закрытие файлов, закрытие курсоров и т. Д.). Даже тогда я бы переопределил onStop
DialogFragment, а не onStop
лежащий в основе Dialog.