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