10

如果它正在显示,我需要在 FragmentActivity 的 onStop() 中关闭 DialogFragment,这就是我所做的

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

但我通常会得到 IllegalStateException。所以请告诉我为什么该代码是错误的,以及在 onStop() 中关闭 DialogFragment 的正确方法是什么?谢谢你。

4

3 回答 3

23

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

“与 commit() 类似,但允许在保存活动状态后执行提交。这很危险,因为如果活动需要稍后从其状态恢复,则提交可能会丢失,因此这只应用于它的情况UI 状态在用户身上发生意外变化是可以的。”

所以fordismissAllowingStateLoss()是同样的方法。

于 2013-05-30T18:27:48.160 回答
8

如果您想取消 a DialogFragmentin onStop(),您可能不想使用 aDialogFragment而是使用经典Dialog

存在的原因DialogFragment是允许在重新创建Activity时自动恢复对话框。如果您在 中关闭它onStop(),它将永远不会恢复。

另外,如果你使用dismissAllowingStateLoss(),dismiss 事务可能不会被正确记录onSaveInstanceState()(顾名思义,可能会发生状态丢失),这将导致在重新创建活动时恢复对话框,显然不是这样你要。

于 2016-01-07T13:37:24.787 回答
3

尝试使用dismissAllowingStateLoss()而不是dismiss().

于 2013-05-30T18:23:15.837 回答