正确地驳回进度对话框

时间:2013-03-27 08:57:09

标签: android android-activity progressdialog android-lifecycle

我有一个进度对话框,我需要解雇然后完成应用程序。 我这样做的方式是这样的:

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中我可以看到这个令人讨厌的错误。

1 个答案:

答案 0 :(得分:1)

我没有测试过这个,虽然它应该可行。但是,作为替代方案,您可以在对话框的finish()和活动的onClick来电onStop中致电dialog.dismiss()

在onStop中调用dismiss将避免 window leak 警告消息。