最近用popupwindow出现一个问题,所以网上找了很多答案,这个最是齐全,所以粘贴上来供大家分享一下。
popupwindow之所以叫这个名字,肯定是要从某个地方弹出啦,但是从哪个地方呢?必须是指定一个view嘛
void android.widget.PopupWindow.showAtLocation(View parent, int gravity, int x, int y)
调用这个函数就能显示popupwindow了,但是有的同学会有幸碰到一个异常,关于这个异常的解释是unable to add window -- token null is not valid;is your activity running?
看起来就有点纳闷了,为啥呢?肯定是你showAtLocation第一个参数用不鸟啦,你有可能是在activity之外showAtLocation,或者是在Activity的onCreate()函数里面调用了showAtLocation,多半是后者,由于你的popupwindow要依附于一个activity,而activity的onCreate()还没执行完,哪来的popup让你弹出来嘛。
因此,你要做的就是让这个showAtLocation的调用再晚一点
解决办法如下:
@Override
public void onWindowFocusChanged(boolean hasFocus) {
// TODO Auto-generated method stub
super.onWindowFocusChanged(hasFocus);
if(hasFocus){
showPopupWindow(View parent);
}
}
以上方法运行到这个方法的时候系统才会肯定得告知你这个activity已经加载完毕。可以和用户进行交互了