如果它正在显示,我需要在 FragmentActivity 的 onStop() 中关闭 DialogFragment,这就是我所做的
if(mAlertDlg != null && mAlertDlg.getDialog() != null)
mAlertDlg.dismiss();
但我通常会得到 IllegalStateException。所以请告诉我为什么该代码是错误的,以及在 onStop() 中关闭 DialogFragment 的正确方法是什么?谢谢你。
如果它正在显示,我需要在 FragmentActivity 的 onStop() 中关闭 DialogFragment,这就是我所做的
if(mAlertDlg != null && mAlertDlg.getDialog() != null)
mAlertDlg.dismiss();
但我通常会得到 IllegalStateException。所以请告诉我为什么该代码是错误的,以及在 onStop() 中关闭 DialogFragment 的正确方法是什么?谢谢你。
你应该使用dialogFragment.dismissAllowingStateLoss()
. 正如文档所说commitAllowingStateLoss()
:
“与 commit() 类似,但允许在保存活动状态后执行提交。这很危险,因为如果活动需要稍后从其状态恢复,则提交可能会丢失,因此这只应用于它的情况UI 状态在用户身上发生意外变化是可以的。”
所以fordismissAllowingStateLoss()
是同样的方法。
如果您想取消 a DialogFragment
in onStop()
,您可能不想使用 aDialogFragment
而是使用经典Dialog
。
存在的原因DialogFragment
是允许在重新创建Activity时自动恢复对话框。如果您在 中关闭它onStop()
,它将永远不会恢复。
另外,如果你使用dismissAllowingStateLoss()
,dismiss 事务可能不会被正确记录onSaveInstanceState()
(顾名思义,可能会发生状态丢失),这将导致在重新创建活动时恢复对话框,显然不是这样你要。
尝试使用dismissAllowingStateLoss()
而不是dismiss()
.