美文网首页
PopupWindow在生命周期中创建报错崩溃问题

PopupWindow在生命周期中创建报错崩溃问题

作者: 李建彪 | 来源:发表于2017-05-24 17:15 被阅读0次

比如在跳转的时候要加载数据,加载数据的时候给个提示框,数据加载中...等等。开始我放在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);  
            }  
        });  

还有更好的方法欢迎在下方评论。

相关文章

网友评论

      本文标题:PopupWindow在生命周期中创建报错崩溃问题

      本文链接:https://www.haomeiwen.com/subject/jvsoxxtx.html