旋转设备时加载对话框

6
我有一个包含异步任务活动(activity),它将执行一些下载工作。在下载时,会显示一个加载对话框
我的问题是,当我仅以一个方向进行操作时,它对我很有效。但是当我在下载时旋转设备时,它会显示window leaked并且会在post execute中崩溃,提示dialog.cancel
经过更深入的研究,我认为这是由于设备旋转上下文改变所致。
当设备旋转时,活动(activity)将被重新创建,因此上下文(context)将被更改
但是我已经使用旧的对话框进行了创建,并且那个不是当前上下文。所以当我取消它时,会显示错误
有什么解决办法吗?有任何想法朋友们?
我正在使用蜂巢(honeycomb),我尝试使用片段(fragment),但没有找到好的示例。我现在主要在尝试这个,
如果有人能给我一些链接,那将是很好的
1个回答

3
首先:使用showDialog方法打开对话框(在官方文档中有很多例子)。这样做,活动将负责在销毁时关闭对话框,并在重新创建活动后重新显示它。
此外...如果对话框显示进度条(而不是轮子),您将希望在方向更改后更新对话框的进度。为了实现这一点,我建议使用onRetainNonConfigurationInstance返回对话框和/或活动本身的当前状态。然后,您可以使用getLastNonConfigurationInstance来恢复该状态。如果想看示例,请搜索这两个方法。
还要记住的一件事:如果您从AsyncTask更新对话框或任何其他UI元素的状态,则必须意识到,在重新创建活动后,AsyncTask可能指向错误的UI引用。为了处理这个问题,您可以创建一个代理类(代理设计模式)来将AsyncTask进度通知与当前UI元素分离。

感谢Cristian的回答。我使用了ProgressDialog,但在旋转时崩溃了。 - Jithin
什么是代理设计模式?听起来很有趣。我对它一无所知。你能提供一些相关链接吗? - Jithin
看看 iosched 应用的源代码。它展示了如何使用onRetainNonConfigurationInstancegetLastNonConfigurationInstance,以及代理设计模式的好例子。 - Cristian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接