Open FlogFly opened 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); } }
说反了,是SVProgress在往DecorView添加东西的时候,AlertView正好要执行dismiss,要去DecorView执行remove,然后就出错
比如先弹出一个alertView,然后点击弹框上的按钮,然后显示一个SVProgress的提示框,就出现报错。我看了下,二个库的写法都是把布局加到了DecorView .然后消失的时候移除,中间出现问题:
比如点击了弹框的确认按钮,这时候执行:
这个时候执行完onItemClick的时候,就会把AlertView这个View从decorView中移除,但是这时候,如果启动了svProgressHUD弹框,这时候又会去往decorView中加View,就会报错。
所以如果把SVProgressHUD的弹框的显示放在onDismiss中就不会有问题:
因为代码是先remove后再执行onDismiss,这时候去执行就SVProgress的话,decorView去add就不会报错了,没有冲突,因为这时候Alertview的remove动作已经结束: