如何在onstop()中安全地解除DialogFragment?

时间:2013-05-30 17:07:46

标签: android android-dialogfragment dialogfragment

我需要在FragmentActivity的onStop()中解除DialogFragment,如果它正在显示,这就是我做的事情

if(mAlertDlg != null && mAlertDlg.getDialog() != null)
        mAlertDlg.dismiss();

但我通常得到IllegalStateException。那么请告诉我为什么代码错了,在onStop()中解除DialogFragment的正确方法是什么?谢谢。

3 个答案:

答案 0 :(得分:17)

您应该使用dialogFragment.dismissAllowingStateLoss()。正如文档所说commitAllowingStateLoss()

  

“像commit()一样,但允许在一个之后执行提交   活动的状态已保存。这很危险,因为提交可以   如果活动需要稍后从其状态恢复,那么就会丢失   这应该仅用于UI状态正常的情况   在用户上意外更改。“

因此dismissAllowingStateLoss()采用相同的方法。

答案 1 :(得分:7)

如果您想解雇DialogFragment中的onStop(),您可能不想使用DialogFragment而是使用经典Dialog

DialogFragment存在的原因是允许在重新创建活动时自动恢复对话框。如果您在onStop()中将其关闭,则永远无法恢复。

此外,如果您使用dismissAllowingStateLoss(),则可能无法在onSaveInstanceState()中正确记录解雇事务(正如名称所示,可能会发生状态丢失),这将导致对话框恢复当重新创建活动时,显然这不是你想要的。

答案 2 :(得分:3)

尝试使用dismissAllowingStateLoss()代替dismiss()