项目中经常会用到的组件PopupWindow,而运用它时往往会用到它的方法showAtLocation(),所以,我们在运用不当时会出现crash的现象,原因就是view还没有加载完毕,这时就要显示PopupWindow,所以导致异常。
这样类似的情况,我们会遇到的报错信息如下:
Unable to add window --token null is not valid; is your activity running
问题一般会出现在华为honor和小米手机上
原因:
PopupWindow.showAtLocation(findViewById(R.id.main), Gravity.BOTTOM,0,0);
popwindow必须依附于某一个view,而在oncreate中view还没有加载完毕,必须要等activity的生命周期函数全部执行完毕,你需要依附的view加载好后才可以执行popwindow。
解决方法:
延时1s执行
findviewById(R.id.mView).postDelay(new Runnable() {
@Override
public void run() {
popwindow.showAtLocation(mView, Gravity.CENTER, 0, 0);
}
},1000);