Unable to add window -- token null is not valid; is your activity running?

在从Activity A跳转到Activity B并进行网络请求时,尝试显示PopupWindow导致错误。解决方法是在确认Activity已完全启动(使用isAttachedToWindow方法判断)后展示PopupWindow,并通过view的变化回调处理show和dismiss,同时添加removeOnAttachStateChangeListener防止内存泄漏。
摘要由CSDN通过智能技术生成

我的场景是自定义一个popupwindow,然后再activityA跳转到activityB的的时候,B里面有个借口请求,开始请求是show,然后报了这个错,意思就是我的activity还未完全运行起来,就show了pop窗口

既然activity还未完全运行起来,那么我们就要加个判断去判断activity是否已经启动,isAttachedToWindow,这个方法的意思就是判断activity是否已经初始化完成并且可以被调用

上代码

public void show(){
        Activity topActivity = ActivityUtils.getTopActivity();
        if(topActivity instanceof AppCompatActivity) {
            View decorView = topActivity.getWindow().getDecorView();
            if (decorView.isAttachedToWindow()) {
                showAtLocation(topActivity.getWindow().getDecorView(), Gravity.CENTER,0,0);
            }else {
                decorView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
                    @Override
                    public void onViewAttachedToWindow(View v) {
                        showAtLocation(topActivity.getWindow().getDecorView(), Gravity.CENTER,0,0);
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值