onCreate方法中调用PopupWindow的错误

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

pop =newPopupWindow(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没测试过。


 


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


@Override
public void onWindowFocusChanged(boolean hasFocus) {
 // TODO Auto-generated method stub
 super.onWindowFocusChanged(hasFocus);
 if(hasFocus){
  showPopupWindow(getApplicationContext());
 }
}
其中showPopupWindow(getApplicationContext())是我自己定义的专门显示popupwindow的一个函数。


当activity获得焦点之后,activity是加载完毕的了,这个方法的技巧性比较强,很难想到。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值