解决常见的android.view.WindowManager$BadTokenException

来源:互联网 发布:聚合数据接口 编辑:程序博客网 时间:2024/06/09 07:51

转载自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0304/963.html

如题:在activity的oncreate方法中使用popupwindow出现以下错误:
android.view.WindowManager$BadTokenException: Unable to add window --
token null is not valid; is your activity running?

错误代码如下 :

pop = new PopupWindow(pop_view,320,250); pop.showAtLocation(parent, Gravity.TOP,0, 0);


应把pop.showAtLocation(parent, Gravity.TOP,0, 0)这一句移出oncreate方法,在控件渲染完毕后再使用。

但是移出oncreate方法的话该移到哪里去呢?网友的方法大概是这几种:

1、移到事件中(比如一个button的click事件中);
2、移到子线程中;另起一线程,在线程中不断循环,直到判断控件是否渲染完毕(如长宽大于0),不推荐。。。
3、移到重写的控件(parent)中,在控件ondraw()完后生成pop。
ps:1、2绝对没问题,3没测试过。

推荐的解决方法:

后来在网上找到一个绝佳的方法:

@Overridepublic void onWindowFocusChanged(boolean hasFocus) { // TODO Auto-generated method stub super.onWindowFocusChanged(hasFocus); if(hasFocus){  showPopupWindow(getApplicationContext()); }}


其中showPopupWindow(getApplicationContext())是我自己定义的专门显示popupwindow的一个函数。

当activity获得焦点之后,activity是加载完毕的了,在这里处理view就不会再抛错


另一种抛错

android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application


一般出错的原因都在于传入的context是application而不是activity,这里传入activity对象则可以解决这个问题。

参照自:http://blog.csdn.net/crash163/article/details/51829341

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 300020股票 银江股份股票 银江股票 银河号事件 银河事件 我见银河 银河号 银河传说 银河证卷 中国银河 银河是什么 什么的银河 什么是银河 银河it学院 银河主宰 国际银河 银河补习班观看 银河补习班在线完整观看 银河补习班完整 银河补习班免费观看 银河补习班正式上映 银河补习班上映 银河补习班观后感 银河系高清图 银河补习班演员表 银河帝国之刃 银河补习班在线 银河补习班免费 银河补习班结局 银河补习班国语免费观看 银河补习班演员 银河补习班经典语录 银河证券海王星手机版 银河证券手机版 银河湾附近幼儿园 银河混合服务基金 银河基金研究中心 银河国际会所 银河是什么样子的 银河国际购物中心 银河湾明苑户型图