首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

PopupWindow的异常:android.view.WindowManager$BadTokenException

2012-07-18 
PopupWindow的错误:android.view.WindowManager$BadTokenException如题:在activity的oncreate方法中使用po

PopupWindow的错误:android.view.WindowManager$BadTokenException
如题:在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方法,在控件渲染完毕后再使用 1 楼 mochenyang 2011-10-10   你就会说,你做做看,移到哪? 2 楼 MultiArrow 2011-10-10   mochenyang 写道你就会说,你做做看,移到哪?
1、移到事件中;
2、移到子线程中;
另起一线程,在线程中不断循环,直到判断控件是否渲染完毕(如长宽大于0),不推荐。。。
3、移到重写的控件(parent)中,在控件ondraw()完后生成pop。
ps:1、2绝对没问题,3没测试过。 3 楼 janey19891018 2011-11-12   "直到判断控件是否渲染完毕(如长宽大于0),


如何判断渲染完毕? 4 楼 MultiArrow 2011-12-13   janey19891018 写道"直到判断控件是否渲染完毕(如长宽大于0),


如何判断渲染完毕?
在oncreate里另起一个线程,在线程中使用while来循环判断pop的长宽(其实是在等待控件渲染完毕),如果大于0,则说明控件已经渲染完毕,中止循环,然后可设置pop.showAtLocation(parent, Gravity.TOP,0, 0)。
ps:总感觉这不是个好方法,有很大可能会陷入死循环。还有,如果觉得while时太占用资源,可用while里设置一个sleep,比较说sleep(100),这样的话循环不了几次控件就浸染完了。不会太耗费资源。 5 楼 eajon 2012-03-14   我写在handler里面,正常使用时没问题的,就是进行许多的别的activity操作之后再返回到这个acticity,在handler里面调用也会出错

热点排行