正确地关闭进度对话框

3

我有一个进度对话框,我需要关闭它并结束应用程序。我现在的做法是:

new AlertDialog.Builder(MainActivity.this)
                            .setMessage("There has been a problem.")
                            .setPositiveButton("OK",
                                    new DialogInterface.OnClickListener() {
                                        public void onClick(
                                                DialogInterface dialog,
                                                int which) {
                                            dialog.dismiss();
                                            finish();
                                        }
                                    }).show();

然而,我总是遇到这个著名的错误:
Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@48189240 is not valid; is your activity running?
05-23 16:56:44.573: ERROR/AndroidRuntime(2494):     at android.view.ViewRoot.setView(ViewRoot.java:505)
05-23 16:56:44.573: ERROR/AndroidRuntime(2494):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:200)
05-23 16:56:44.573: ERROR/AndroidRuntime(2494):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:114)
05-23 16:56:44.573: ERROR/AndroidRuntime(2494):     at android.view.Window$LocalWindowManager.addView(Window.java:424)
05-23 16:56:44.573: ERROR/AndroidRuntime(2494):     at android.app.Dialog.show(Dialog.java:241)
05-23 16:56:44.573: ERROR/AndroidRuntime(2494):     at android.app.ProgressDialog.show(ProgressDialog.java:107)
05-23 16:56:44.573: ERROR/AndroidRuntime(2494):     at android.app.ProgressDialog.show(ProgressDialog.java:90)
05-23 16:56:44.573: ERROR/AndroidRuntime(2494):     at android.app.ProgressDialog.show(ProgressDialog.java:85)

我怎样才能无误地解除它?我这样做对吗?

非常感谢您的帮助。

编辑:我可以完美地显示它,即使在解除它时,用户也看不到任何问题,但是在我的LogCat中,我可以看到那个讨厌的错误。


你能最初显示它吗? - ngesh
1
似乎您正在创建对话框,而此时您的活动并未处于活动/可见状态。如果您的活动在对话框显示时不会存在,那么您不能将其用作对话框的上下文。 - Mr.Me
我在Android 2.3.4和4.1中测试了这段代码,它可以正常工作——对话框被关闭并且活动已经完成。也许问题来自其他地方? - Andy Res
一旦活动进入暂停状态,就会发生此错误。因此,我认为问题发生在显示对话框时,想知道何时显示对话框。 - Triode
你能告诉我什么时候会出现异常吗?是在显示对话框时还是在关闭对话框时?如果是在关闭对话框时,请检查对话框是否正在显示。'if(progressDialog.isShowing()){ progressDialog.dismiss(); }' 如果是在显示对话框时,验证您用于显示对话框的“MainActivity”是否在前台。如果不是,则会出现此问题。 - android.fryo
显示剩余2条评论
1个回答

1
我尚未测试过这个,不过它应该可以工作。但是,作为一种替代方法,您可以在对话框的onClick中调用finish(),并在活动的onStop中调用dialog.dismiss()
onStop中调用dismiss将避免窗口泄漏警告消息。

这意味着我的对话框需要成为一个类变量,因为我需要在onStop方法中访问它(以便关闭它),是吗? - noloman

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