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

Way*_*yne 7 android android-dialogfragment dialogfragment

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

if(mAlertDlg != null && mAlertDlg.getDialog() != null)
        mAlertDlg.dismiss();
Run Code Online (Sandbox Code Playgroud)

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

Nic*_*lle 18

你应该用dialogFragment.dismissAllowingStateLoss().正如文档所述commitAllowingStateLoss():

"就像commit()一样,但允许在保存活动状态后执行提交.这很危险,因为如果活动需要稍后从状态恢复,则提交可能会丢失,所以这只应用于它的情况UI状态可以在用户上意外更改."

所以对于dismissAllowingStateLoss()同样的方法.


Bla*_*der 7

如果你想解雇DialogFragmentin onStop(),你可能不想使用DialogFragment但是经典Dialog而不是.

DialogFragment存在的原因是允许在重新创建活动时自动恢复对话框.如果你将其解雇onStop(),它将永远无法恢复.

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