我有一个Activity,需要在其中显示Dialog。这里一切都很好。我已经在Activity中覆盖了onCreateDialog方法,这里是代码:
@Override
protected Dialog onCreateDialog(int dialog)
{
if(dialog == 10)
{
if(waitDialog != null)
waitDialog.dismiss();
dialogCreated = true;
waitDialog = CreateWaitDialog(this);
return waitDialog;
}
else
return new Dialog(this);
}
CreateWaitDialog是创建对话框的自定义方法,而waitDialog是 static 变量。
我通过调用showDialog(10)
显示对话框所有代码都正常运行。
显示对话框后,我正在通过调用来关闭它。
if(waitDialog != null)
waitDialog.hide();
当活动被摧毁时,我正在解雇它。
if(dialogCreated)
dismissDialog(10);
super.onDestroy();
它正在关闭,一切都很棒。 但是,当我更改设备的方向并重新创建活动时,它会自动弹出!我没有打电话给任何showDialog或类似的东西它只是弹出来了!
答案 0 :(得分:10)
我认为这是活动的定义行为和onCreateDialog:
回调创建活动管理(保存和恢复)的对话框。默认实现调用onCreateDialog(int)以实现兼容性。如果您的目标是HONEYCOMB或更高版本,请改为使用DialogFragment代替。
如果你使用showDialog(int),活动将第一次调用此方法,然后挂起。将自动保存并恢复此方法创建的任何对话框,包括是否显示。
如果您希望活动为您管理保存和恢复对话框,则应覆盖此方法并处理传递给showDialog(int)的任何ID。
我猜测onDestroy在活动生命周期中为时已晚,无法解除对话框。我的猜测是,Activity正在将对话框保存在onSaveInstanceState中。
我可能会在调用super.onSaveInstanceState之前尝试解除onSaveInstanceState中的对话框,然后在android尝试保存并恢复它之前,该对话框将被解除。
@Override
onSaveInstanceState(Bundle outstate) {
dismissDialog(10);
super.onSaveInstanceState(outstate);
}
答案 1 :(得分:5)
我发现自己遇到了类似的问题,因为我在没有调用super.onDismiss()的情况下覆盖了onDismiss()。如果您发现自己的对话框在重新创建活动时重新出现,您可能需要验证您是否犯了同样的错误。
答案 2 :(得分:3)
如果您想阻止应用继续保存和恢复对话框,请调用Activity.removeDialog(int id)。