saiwu-bigkoo / Android-AlertView

仿iOS的AlertViewController
1.39k stars 366 forks source link

Android-AlertView与作者另外一个SVProgressHUD这个库一起使用报错 #33

Open FlogFly opened 6 years ago

FlogFly commented 6 years ago

比如先弹出一个alertView,然后点击弹框上的按钮,然后显示一个SVProgress的提示框,就出现报错。我看了下,二个库的写法都是把布局加到了DecorView .然后消失的时候移除,中间出现问题:

比如点击了弹框的确认按钮,这时候执行:

@Override
    public void onItemClick(Object o, int position) {
        if (position == 0) {
            svProgressHUD.showErrorWithStatus("hahah");
        }
    }

这个时候执行完onItemClick的时候,就会把AlertView这个View从decorView中移除,但是这时候,如果启动了svProgressHUD弹框,这时候又会去往decorView中加View,就会报错。

java.lang.NullPointerException: Attempt to read from field 'int android.view.View.mViewFlags' on a null object reference

所以如果把SVProgressHUD的弹框的显示放在onDismiss中就不会有问题:

@Override
    public void onDismiss(Object o) {
         svProgressHUD.showErrorWithStatus("hahah");
    }

因为代码是先remove后再执行onDismiss,这时候去执行就SVProgress的话,decorView去add就不会报错了,没有冲突,因为这时候Alertview的remove动作已经结束:

public void dismissImmediately() {
        decorView.removeView(rootView);
        isShowing = false;
        if(onDismissListener != null){
            onDismissListener.onDismiss(this);
        }

    }
FlogFly commented 6 years ago

说反了,是SVProgress在往DecorView添加东西的时候,AlertView正好要执行dismiss,要去DecorView执行remove,然后就出错