我希望有人可以帮忙解决这个问题,因为这让我绝对疯狂。
我有一个ProgressDialog,告诉用户我的应用程序正在连接到服务器。它是使用“showDialog(CHECKING_USER_NAME_AND_PASSWORD_AVAILABILITY);”启动的。所以活动将为我管理它的状态(具体来说,我希望ProgressDialog在设备旋转时保持可见,我不想自己管理状态)。因此,我正在使用onCreateDialog,如此处所述http://developer.android.com/guide/topics/ui/dialogs.html。
当服务器响应时,我的应用程序通过调用“showDialog(USER_NAME_AND_PASSWORD_NOT_AVAILABLE)显示AlertDialog;单击确定后,”调用dismissDialog(CHECKING_USER_NAME_AND_PASSWORD_AVAILABILITY);“以删除ProgressDialog。
首先,我将描述一个正常的工作场景。 用户单击按钮,出现ProgressDialog,出现AlertDialog(注意我仍然可以看到它背后的一点ProgressDialog,如预期的那样),用户单击OK并且两个Dialogs都消失。
这是一个非工作场景: 用户单击按钮,出现ProgressDialog,出现AlertDialog,用户旋转设备。现在,这是不好的 - 现在AlertDialog是ProgressDialog的后面,ProgressDialog就在前面。没有办法关闭ProgressDialog,因为当用户在alertDialog中单击OK时它会关闭。
我已经尝试将ProgressDialog的dismissDialog移动到代码中的各个位置(比如服务器响应的时候),但我尝试的所有内容似乎都有不同的问题。
我在应用程序中粘贴了一些Toast消息,并且看起来onCreateDialog和onPrepareDialog方法的调用顺序被反转,这解释了问题。例如,当我第一次启动应用程序时,我看到了这个调用顺序:
OnCreate for ProgressDialog
OnPrepare for ProgressDialog
OnCreate用于alertDialog
OnDrepare for alertDialog
然后,当我旋转设备时(alertDialog仍在运行),我看到:
OnCreate用于alertDialog
OnDrepare for alertDialog
OnCreate for ProgressDialog
OnPrepare for ProgressDialog
有没有人有任何建议?我开始觉得我需要使用onSaveInstanceState,这首先打破了使用showDialog的重点。
答案 0 :(得分:0)
如果对话框ID是什么关系?如果交换周围的值,是否会改变行为?
请注意,即使它确实如此,我仍然建议在显示AlertDialog之前解除ProgressDialog,因为Android没有指定对话框在状态恢复时重新显示的顺序。
答案 1 :(得分:0)
如果您使用托管的AlertDialog,请不要从onCreate()执行showDialog()。