`
貌似掉线
  • 浏览: 260817 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Dialog调用dismiss方法出现异常解决方法

阅读更多
本文原创,转载请保留原文地址: http://maosidiaoxian.iteye.com/blog/1547445

在使用Dialog时,调用dismiss方法,有时会出现异常:java.lang.IllegalArgumentException: View not attached to window manager

出现这个异常的原因可能是,在dismiss对话框的时候,它所在的activity因为一些原因已经先退出了,所以会出现这个异常。
目前我认为最好的解决方法是,使用Activity里面封装好的showDialog(int id)和dismissDialog(int id)方法。
使用示例代码如下(代码取自我的一个项目,去掉与本主题无关内容,如果有小的错误,请自行调试):
/*
 * @(#)SearchActivity.java		       Project:lol
 * Date:2012-4-29
 *
 * Copyright (c) 2011 CFuture09, Institute of Software, 
 * Guangdong Ocean University, Zhanjiang, GuangDong, China.
 * All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.sinaapp.msdxblog.android.lol.activity;

import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.FrameLayout;
import android.widget.FrameLayout.LayoutParams;
import android.widget.LinearLayout;

import com.sinaapp.msdxblog.android.lol.R;
import com.sinaapp.msdxblog.androidkit.thread.HandlerFactory;

/**
 * @author Geek_Soledad (66704238@51uc.com)
 */
public abstract class WebViewActivity extends Activity {

	protected WebView mSearchWV;
	protected Context mContext;
	private static final int PROGRESS_ID = 1;

	/**
	 * 返回需要加载的URL地址。
	 * 
	 * @return 需要加载的URL地址。
	 */
	protected abstract String getHomeUrl();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		mContext = this;
		mSearchWV = new WebView(mContext);
		mSearchWV.getSettings().setJavaScriptEnabled(true);
		mSearchWV.setWebViewClient(new WebViewClient() {

			public boolean shouldOverrideUrlLoading(WebView view, String url) {
				view.loadUrl(url);
				return true;
			}

			@Override
			public void onPageStarted(WebView view, String url, Bitmap favicon) {
				super.onPageStarted(view, url, favicon);
				showDialog(PROGRESS_ID);
			}

			@Override
			public void onPageFinished(WebView view, String url) {
				super.onPageFinished(view, url);
				dismissDialog(PROGRESS_ID);
			}
		});
		addContentView(mSearchWV, new FrameLayout.LayoutParams(
				LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

		mSearchWV.loadUrl(getHomeUrl());
	}

	@Override
	protected Dialog onCreateDialog(int id) {
		if (id == PROGRESS_ID) {
			return ProgressDialog.show(mContext, null,
					mContext.getString(R.string.loading));
		}
		return super.onCreateDialog(id);
	}
}
1
3
分享到:
评论
2 楼 貌似掉线 2012-11-20  
activity里是有这两个方法的。至于 PROGRESS_ID是自己定义的,对话框的一个标识ID。
1 楼 aduovip 2012-11-19  
showDialog(PROGRESS_ID);  

dismissDialog(PROGRESS_ID);  

是怎么调用的呀

相关推荐

    dialog和spinner实例

    - 在`Activity`的`onPause()`或`onStop()`方法中调用`Dialog`的`dismiss()`方法,确保`Dialog`在`Activity`不再可见时关闭。 - 检查`Dialog`的创建逻辑,确保它不会在`Activity`已经被销毁的状态下被创建或显示。 ...

    Android实现Windows风格的Dialog

    关闭Dialog时,可以调用`dismiss()`方法。 7. **动画效果**:为了增加用户体验,可以添加进入和退出动画,使Dialog的出现和消失更加自然。这可以通过设置Dialog的动画属性或者自定义动画类实现。 8. **对话框尺寸*...

    应用源码之MockDialogSample.zip

    使用show()方法显示Dialog,dismiss()方法关闭Dialog。源码可能包含在不同场景下何时调用这些方法的示例,如点击按钮、用户交互或特定条件触发。 4. **Dialog的生命周期**: 虽然Dialog不是Activity,但它有自己...

    弹出对话框

    - 显示与隐藏:`show()`方法用来显示Dialog,`dismiss()`方法用来关闭Dialog。需要注意的是,Dialog并非Activity的一部分,不会随着Activity的生命周期变化而自动销毁,因此需要在合适的时候调用`dismiss()`以释放...

    Android应用源码之39.Dialogs学习.zip

    7. **显示和关闭Dialog**: 显示Dialog通常使用show()方法,而关闭Dialog则调用dismiss()方法。在Activity的onPause()和onResume()方法中处理Dialog的显示和关闭,以避免出现用户界面异常。 8. **Dialog主题和样式**...

    android手机应用源码进度条对话框Demo.rar

    - 同时,需要处理可能出现的异常,如网络错误、文件读取错误等,以提供良好的用户体验。 7. **测试和调试**: - 源码可能包含了测试用例,用于验证进度条对话框功能的正确性。开发者可以使用Android Studio的...

    Android耗时操作Demo

    使用`ProgressDialog.show()`方法创建并显示对话框,确保在主线程中执行,以免出现异常。在下载完成后,使用`ProgressDialog.dismiss()`关闭对话框。 4. **处理线程间的通信**: 为了在子线程和主线程之间传递数据...

    Android 中 android.view.WindowLeaked的解决办法

    2. **异常情况**:如果在Activity被销毁(例如调用`finish()`方法)时,Dialog或PopupWindow仍处于打开状态,系统会抛出`WindowLeaked`异常,因为此时没有活动的Activity能够作为这些窗口的宿主,导致窗口管理器中的...

    android全局对话框dhk.rar

    8. **线程管理**:对话框的显示和关闭应在主线程进行,否则可能会出现异常。如果你需要在后台线程更新对话框内容,记得使用Handler、runOnUiThread()或者LiveData等机制。 9. **设计原则**:全局对话框应当简洁明了...

    自定义Diualog对话框

    2. **安全性检查**:确保`TextView`不为空再设置文本,避免出现空指针异常。 #### 四、定义动画资源 为了使进度对话框更加生动,通常会为进度指示器添加动画效果。在本例中,使用了`RotateAnimation`来实现旋转...

    Android应用源码之android 自定义对话框-IT计算机-毕业设计.zip

    在Activity暂停或销毁时,确保对话框能够正确关闭,避免出现内存泄漏或状态异常。 通过上述步骤,你可以创建一个完整的自定义对话框。这个毕业设计的源码提供了实践示例,适合学习者进一步研究和实践Android自定义...

    CommentDialog.zip

    这些方法需要与Activity的生命周期同步,以避免出现异常。 6. **事件监听**: CommentDialog内的按钮通常会设置OnClickListener,监听用户的点击事件。当用户点击“提交”按钮时,事件监听器会触发处理评论的逻辑...

    listview下拉刷新

    // 加载完毕后,调用 swipeRefreshLayout.setRefreshing(false) 停止刷新动画 } }); ``` 关于"如何将页面加透明",这可能是指在下拉刷新过程中,让ListView背景变透明,以便用户看到更多的内容。我们可以为...

    Android之PopupWindow

    1. 为了防止内存泄漏,记得在Activity的`onDestroy()`中调用`popupWindow.dismiss()`。 2. `PopupWindow`不能比其父Window更大,否则会出现显示异常。 总之,`PopupWindow`是Android开发中的一个重要组件,提供了...

Global site tag (gtag.js) - Google Analytics