Dialog.dismiss()方法无效的解决方法
在最近的项目中使用WebView加载网页,开始时show加载框,结束时dismiss加载框,但是加载框不消失:
private Dialog dialog;web.setWebViewClient(new WebViewClient() {@Overridepublic void onPageStarted(WebView view, String url,Bitmap favicon) {super.onPageStarted(view, url, favicon);dialog = CommonUtils.getCustomLoadingDialog(XXXXActivity.this, "数据正在加载中,请稍后...");dialog.show();}@Overridepublic void onPageFinished(WebView view, String url) {// TODO Auto-generated method stubsuper.onPageFinished(view, url);dialog.dismiss();//在这里时}});
dialog中dismiss()方法源码如下:
public void dismiss() {if (Looper.myLooper() == mHandler.getLooper()) {dismissDialog();} else {mHandler.post(mDismissAction);}}void dismissDialog() {if (mDecor == null || !mShowing) {return;}//我进行了debug调试,到这里发现mWindow已经Destroyed了,所以returnif (mWindow.isDestroyed()) {Log.e(TAG, "Tried to dismissDialog() but the Dialog's window was already destroyed!");return;}try {mWindowManager.removeView(mDecor);} finally {if (mActionMode != null) {mActionMode.finish();}mDecor = null;mWindow.closeAllPanels();onStop();mShowing = false;sendDismissMessage();}}
谷歌了很多,发现一个已经被android废弃的弹出框显示消失方法,解决代码如下:
private Dialog dialog;web.setWebViewClient(new WebViewClient() {@Overridepublic void onPageStarted(WebView view, String url,Bitmap favicon) {super.onPageStarted(view, url, favicon);showDialog(1);}@Overridepublic void onPageFinished(WebView view, String url) {// TODO Auto-generated method stubsuper.onPageFinished(view, url);dismissDialog(1);}});}@Override@Deprecatedprotected Dialog onCreateDialog(int id) {if (id == 1) {if (dialog == null) {dialog = CommonUtils.getCustomLoadingDialog(XXXXActivity.this, "数据正在加载中,请稍后...");}return dialog;}return super.onCreateDialog(id);}