重新创建Activity后,将再次显示Android Dialog

时间:2012-10-24 19:04:57

标签: android android-activity android-dialog

我有一个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或类似的东西它只是弹出来了!

3 个答案:

答案 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)。