旋转设备时加载对话框

时间:2011-03-04 17:37:22

标签: android

我有一个activity,其中有一个async task会做一些下载工作。在下载时,它将显示l oading dialog 我的问题是,当我仅在one orentiaon进行此操作时,它对我来说很好。但是当我在下载时rotate,它显示window leaked并且会在崩溃时崩溃 dialog.cancel在我的帖子中执行。
从我对它的研究中我理解它是因为change in the context当设备为rotated时 这是devicerotatedactivityrecreatedcontextchanged
但是我已经创建了旧对话框和wasn't the current context对话框。所以当我取消它时显示错误
对此有什么解决方案,任何想法都是如此 我使用 honeycomb ,我尝试了fragment,但没有得到一个很好的样本。我现在主要是尝试这个,
如果有人能给我一些链接,那将是 大

2 个答案:

答案 0 :(得分:3)

首先:使用showDialog方法(there are a lot of examples in the official documentation)打开对话框。如果这样做,活动将负责解除destroy上的对话框,并在重新创建活动后重新显示它。

另外......如果对话框显示进度条(不是滚轮),则需要在方向更改后更新对话框的进度。为此,我建议使用onRetainNonConfigurationInstance返回对话框的当前状态和/或活动本身。然后,您可以使用getLastNonConfigurationInstance来恢复该状态。关于这两种方法的Google,如果你想看看例子。

要记住的另一件事是:如果要更新对话框的状态和/或AsyncTask中的任何其他UI元素,则必须注意在重新创建活动后,{{1} }可能指向错误的UI引用。为了处理这个问题,您可以创建一个代理类(代理设计模式)来从当前UI元素中分离AsyncTask进度通知。

答案 1 :(得分:-1)

这是因为当设备方向改变时,Activity会重新创建。要禁用此功能,您可以像这样配置Activity。

<activity .... android:configChanges="orientation|keyboard"
...
>

Android: Dialog etc restore after rotation changed