文档章节

使用 PopupWindow 的时候遇到Activity com.avcit… has leaked

BravoZu
 BravoZu
发布于 2013/12/27 23:41
字数 391
阅读 2711
收藏 4

在OnCreate方法中调用

popupWindow.showAtLocation(view, Gravity.LEFT | Gravity.TOP, x, y);

时,会出现以下错误:

Activity com.avcit.conference.MainActivity has leaked window android.widget.PopupWindow$PopupViewContainer@406dfc10 that was originally added here  

android.view.WindowLeaked: Activity com.avcit.conference.MainActivity has leaked window android.widget.PopupWindow$PopupViewContainer@406dfc10 that was originally added here

这是因为这个popupWindow依赖的父Activity已经finish()的了,但是它还存在,所以回有上面的提示。 有两种解决办法:

(1)在onPause()中将它dismiss()了。

<!-- lang: java -->

@Override
	    protected void onPause() {
	    	// TODO Auto-generated method stub
	    	super.onPause();
	    	dismissPopupWindow();
	    	//if(popupWindow != null)
	    }
      
   //判断PopupWindow是不是存在,存在就把它dismiss掉  
    private void dismissPopupWindow() {

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

(2)重新使用一个线程来跑这个popupWindow:

<!-- lang: java -->
 handler.post(new Runnable() {
					@Override
					public void run() {
						int [] location = new int[2];
						view.getLocationInWindow(location);
						View popupView = View.inflate(AppManagerActivity.this, R.layout.popup_item, null);
						LinearLayout ll_app_uninstall = (LinearLayout) popupView.findViewById(R.id.ll_app_uninstall);  
			            LinearLayout ll_app_run = (LinearLayout) popupView.findViewById(R.id.ll_app_start);  
			            LinearLayout ll_app_share = (LinearLayout) popupView.findViewById(R.id.ll_app_share);  
			            ll_app_run.setOnClickListener(AppManagerActivity.this);
			            ll_app_uninstall.setOnClickListener(AppManagerActivity.this); 
			            ll_app_share.setOnClickListener(AppManagerActivity.this); 
			            
			            //拿到当前点击的条目,并设置到view里面
			            AppInfo info = (AppInfo) lv_app_manager.getItemAtPosition(position);
			            ll_app_uninstall.setTag(info);  
		                ll_app_run.setTag(info);  
		                ll_app_share.setTag(info); 
		                
		                //添加动画  
		                LinearLayout ll_app_popup = (LinearLayout) popupView.findViewById(R.id.ll_app_popup);  
		                ScaleAnimation scaleAnimation = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f);  
		                scaleAnimation.setDuration(300);  
						 //new 一个PopupWindow出来  
		                popupWindow = new PopupWindow(popupView, 230, 70);  
		                //一定要给PopupWindow设置一个背景图片,不然的话,会有很多未知的问题的  
		                //如没办法给它加上动画,还有显示会有问题等,  
		                //如果我们没有要设置的图片,那么我们就给它加上了一个透明的背景图片  
		                Drawable drawable = new ColorDrawable(Color.TRANSPARENT);  
		                popupWindow.setBackgroundDrawable(drawable);  
		                
		                int x = location[0] + 60;  
		                int y = location[1];  
		                //把PopupWindow显示出来  
		                popupWindow.showAtLocation(view, Gravity.LEFT | Gravity.TOP, x, y);  
		                //开启动画 
		                ll_app_popup.startAnimation(scaleAnimation); 
					}
				});

© 著作权归作者所有

共有 人打赏支持
BravoZu
粉丝 13
博文 54
码字总数 34332
作品 0
广州
程序员
私信 提问
Android开发中遇到的exception

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.lam.fundamental/com.lam.datasave.dairy.DairyActivity}: java.lang.RuntimeException: Your content must have ......

ice_col
2015/08/11
0
0
关于android.view.WindowLeaked异常的解决方案

虽然是小问题一个,但也困扰了我一段时间,现在记下来,给自己做个备忘,也可以给其他人一个参考。 Android.view.WindowLeaked按字面了解,Window Leaked大概就是说一个窗体泄漏了,也就是我...

程序袁_绪龙
2014/11/29
0
0
使用 PopupWindow 的注意事项

预备知识 使用 PopupWindow 之前, 一定要知道 Android 是怎么响应旋转屏幕的. 如果不知道的话, 那就先去了解下这个知识点. >>> Google 关键词: Android Activity 重建 另外需要知道的就是Pop...

有初啊
2013/11/07
0
2
Android开发中积累的一些报错的解决方法

1.报错: The connection to adb is down, and a severe error has occured. [2012-03-11 09:36:56 - Camera] You must restart adb and Eclipse. [2012-03-11 09:36:56 - Camera] Please en......

IT丶小生
2014/04/21
0
0
Android Activity启动后立即弹出PopupWindow的两个方法

Activity启动后立即弹出PopupWindow的两个方法 若在Activity的onCreate()方法中直接写弹出PopupWindow方法会报错,因为activity没有完全启动是不能 弹出PopupWindow的。 那我们只需要在activ...

扬名立万
2014/05/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java8之stream流的基本操作

一、stream流简介 Stream流是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。 Stream的优点:声明性,可复合,可并行。这三个特性使得stream操作更简洁,更灵活,更高效。 Stre...

嘴角轻扬30
26分钟前
1
0
Docker 可视化管理工具 Panama

Panamax 是一个开源的项目,可以通过简单的拖拉操作就可以实现发布复杂的 Docker 容器应用。Panamax 为 Docker, Fleet & CoreOS 提供友好的管理界面。 容器技术是下一代的虚拟机,但使用该技...

linuxprobe16
27分钟前
2
0
scala中hdfs文件的操作

对于org.apache.hadoop.fs.Path来说, path.getName只是文件名,不包括路径 path.getParent也只是父文件的文件名,同样不包括路径 path.toString才是文件的全路径名 创建文件 hdfs.createNew...

hblt-j
42分钟前
2
0
Eureka 和 zookeeper 的比较

小小小施爷
51分钟前
0
0
c++ 开源算法库 (持续更新)

最近在做算法方面的研究,发现很难找到一个全面而优质的科学计算算法库。不过还是找到一些,在此记录一下,将来也许自己写一个把所有这些整合在一起。本列表会持续不定期更新。 GSL http://w...

propagator
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部