比如在跳转的时候要加载数据,加载数据的时候给个提示框,数据加载中...等等。开始我放在Activity的前3个生命周期里,每个里面都会报错,于是在网上找到几篇有用的资料来记录一下。
第一种方式 ,加延迟:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
window.showAtLocation(view, Gravity.CENTER,0,0);
}
},1000);
这种方法又不好的地方就是 延迟1秒钟才显示,偶尔卡顿的时候 还是会出现问题,也就是说有隐患
那么 第二种:
重写onWindowFocusChanged(),然后在里面显示显示popupwindow就可以了,但是当焦点改变的时候,这个方法会被多次的调用,如果只想调用一次,可以用如下写法:
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (isFirst){
isFirst=false;
window.showAtLocation(view, Gravity.CENTER,0,0);
}
}
上面的又有点麻烦,必须重写方法。
那么我们就想在oncreate中或者某个生命周期中用,那么我们放在异步中去显示,等window彻底显示了才加载我们的popupwindow ,这样不会影响速度也不用考虑什么时候会去加载.虽然第二第三种都很好用,不过我更喜欢第三种,第三种可以在任何地方调用。如下写法:
getWindow().getDecorView().post(new Runnable() {
@Override
public void run() {
window.showAtLocation(view, Gravity.CENTER,0,0);
}
});
还有更好的方法欢迎在下方评论。
网友评论