Era*_*mir 8 android android-dialog android-activity
我有一个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);
}
Run Code Online (Sandbox Code Playgroud)
其中CreateWaitDialog是创建对话框的自定义方法,而waitDialog是静态变量.
我通过调用showDialog(10)来显示对话框
所有代码都正常运行.
显示对话框后,我正在通过调用关闭它.
if(waitDialog != null)
waitDialog.hide();
Run Code Online (Sandbox Code Playgroud)
当Activity被销毁时我就会解雇它.
if(dialogCreated)
dismissDialog(10);
super.onDestroy();
Run Code Online (Sandbox Code Playgroud)
它正在关闭,一切都很棒.但是,当我更改设备的方向并重新创建活动时,它会自动弹出!我没有打电话给任何showDialog或类似的东西它只是弹出!
Tim*_*Tim 10
我认为这是Activity和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);
}
Run Code Online (Sandbox Code Playgroud)
我发现自己遇到了类似的问题,因为我在不调用super.onDismiss()的情况下覆盖了onDismiss().如果您发现自己的对话框在重新创建活动时重新出现,您可能需要验证您是否犯了同样的错误.
| 归档时间: |
|
| 查看次数: |
4813 次 |
| 最近记录: |