Android 对话框片段和对话框

Android 对话框片段和对话框,android,Android,我可以阅读的所有地方:在所有地方使用FragmentDialog,因为它可以独立于活动生命周期。但是,通常情况下,对话框应该异步显示。但是,不鼓励从异步回调提交到FragmentManager。如何处理它?尽量使用DialogFragment,因为正如您所提到的,它有助于保持活动与对话的松散耦合。是的,在某些情况下,您可能需要异步显示对话。在这种情况下,您需要做的是使用宿主组件上的方法调用包装对话调用代码,该方法将告诉您在此实例上显示对话是否安全 如果在活动中调用show,请将调用包装为show

我可以阅读的所有地方:在所有地方使用
FragmentDialog
,因为它可以独立于
活动
生命周期。但是,通常情况下,对话框应该异步显示。但是,不鼓励从异步回调提交到
FragmentManager
。如何处理它?

尽量使用DialogFragment,因为正如您所提到的,它有助于保持活动与对话的松散耦合。是的,在某些情况下,您可能需要异步显示对话。在这种情况下,您需要做的是使用宿主组件上的方法调用包装对话调用代码,该方法将告诉您在此实例上显示对话是否安全

如果在活动中调用show,请将调用包装为show-

if(!isDestroyed()&&!isFinishing())

如果在片段中调用show,则将调用包装为show-

if(isResumed()&&!isRemoving())


这或多或少可以解决在不一致的UI状态下登录的问题

这是不正确的。让我们假设该活动已停止(因为另一个活动是前台)。现在,
isDestroyed()
返回
false
isFinshing()
返回false。因此,我们将获得一个分支并提交给FragmentManager。例外!尝试在onSave()之后提交FragmentManager。