ProgressDialog.dismiss中的IllegalArgumentException

我收到这个崩溃报告:

java.lang.IllegalArgumentException: View not attached to window manager at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:395) at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:239) at android.view.Window$LocalWindowManager.removeView(Window.java:441) at android.app.Dialog.dismissDialog(Dialog.java:306) at android.app.Dialog.access$000(Dialog.java:89) at android.app.Dialog$1.run(Dialog.java:132) at android.app.Dialog.dismiss(Dialog.java:296) at ZhuangDictActivity$1.onPageFinished(ZhuangDictActivity.java:311) at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:299) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:150) at android.app.ActivityThread.main(ActivityThread.java:4385) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:507) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607) at dalvik.system.NativeStart.main(Native Method) 

ZhuangDictActivity中的第311行是searchProgressDialog.dismiss()如下:

 public void onPageFinished(WebView view, String url) { searchProgressDialog.dismiss(); onConfigurationChanged(ZhuangDictActivity.this.getResources().getConfiguration()); super.onPageFinished(view, url); } 

这是ProgressDialog.show:

 public void onPageStarted(WebView view, String url, Bitmap favicon) { searchProgressDialog.setMessage("Loading"); searchProgressDialog.show(); super.onPageStarted(view, url, favicon); } 

在WebView完成加载之前更改方向时发生崩溃。

Solutions Collecting From Web of "ProgressDialog.dismiss中的IllegalArgumentException"

你只是轻视,而不是检查它是否显示。 你必须先检查它:

 if (searchProgressDialog != null && searchProgressDialog.isShowing()) { searchProgressDialog.dismiss(); } 

请覆盖onDestroy方法。

 @Override protected void onDestroy() { super.onDestroy(); if((progressDialog != null) && progressDialog.isShowing() ){ progressDialog.dismiss(); } } 

这是因为你正在试图展示进步对话,但是那一刻你的活动似乎正在消失。

  if (mProgressDialog != null) { mProgressDialog.dismiss(); mProgressDialog = null; } 

我想你已经通过代码解除了对话,而你又在做这件事。 所以在解散之前请检查对话框对象是否为空。 并将其分配给null。