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