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