如题:在activity的oncreate方法中使用popupwindow出现以下错误:
android.view.WindowManager$BadTokenException: Unable to add window --
token null is not valid; is your activity running?
错误代码如下 :
解决方法:
应把pop.showAtLocation(parent, Gravity.TOP,0, 0)这一句移出oncreate方法,在控件渲染完毕后再使用
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方法,在控件渲染完毕后再使用
评论
后来还是改用了alertdialogt + handler + runnable解决的
如何判断渲染完毕?
在oncreate里另起一个线程,在线程中使用while来循环判断pop的长宽(其实是在等待控件渲染完毕),如果大于0,则说明控件已经渲染完毕,中止循环,然后可设置pop.showAtLocation(parent, Gravity.TOP,0, 0)。
ps:总感觉这不是个好方法,有很大可能会陷入死循环。还有,如果觉得while时太占用资源,可用while里设置一个sleep,比较说sleep(100),这样的话循环不了几次控件就浸染完了。不会太耗费资源。
如何判断渲染完毕?
1、移到事件中;
2、移到子线程中;
另起一线程,在线程中不断循环,直到判断控件是否渲染完毕(如长宽大于0),不推荐。。。
3、移到重写的控件(parent)中,在控件ondraw()完后生成pop。
ps:1、2绝对没问题,3没测试过。