我需要在FragmentActivity的onStop()中解除DialogFragment,如果它正在显示,这就是我做的事情
if(mAlertDlg != null && mAlertDlg.getDialog() != null)
mAlertDlg.dismiss();
但我通常得到IllegalStateException。那么请告诉我为什么代码错了,在onStop()中解除DialogFragment的正确方法是什么?谢谢。
答案 0 :(得分:17)
您应该使用dialogFragment.dismissAllowingStateLoss()
。正如文档所说commitAllowingStateLoss()
:
“像commit()一样,但允许在一个之后执行提交 活动的状态已保存。这很危险,因为提交可以 如果活动需要稍后从其状态恢复,那么就会丢失 这应该仅用于UI状态正常的情况 在用户上意外更改。“
因此dismissAllowingStateLoss()
采用相同的方法。
答案 1 :(得分:7)
如果您想解雇DialogFragment
中的onStop()
,您可能不想使用DialogFragment
而是使用经典Dialog
。
DialogFragment
存在的原因是允许在重新创建活动时自动恢复对话框。如果您在onStop()
中将其关闭,则永远无法恢复。
此外,如果您使用dismissAllowingStateLoss()
,则可能无法在onSaveInstanceState()
中正确记录解雇事务(正如名称所示,可能会发生状态丢失),这将导致对话框恢复当重新创建活动时,显然这不是你想要的。
答案 2 :(得分:3)
尝试使用dismissAllowingStateLoss()
代替dismiss()
。