Răsfoiți Sursa

0.0.48.beta10
- fix bugs

Kongzue 2 ani în urmă
părinte
comite
e0a67bff3d

+ 33 - 24
DialogX/src/main/java/com/kongzue/dialogx/dialogs/CustomDialog.java

@@ -455,10 +455,10 @@ public class CustomDialog extends BaseDialog {
                                     if (boxRoot != null) boxRoot.setVisibility(View.GONE);
                                     if (baseViewDrawListener != null) {
                                         if (viewTreeObserver != null) {
-                                            viewTreeObserver.removeOnDrawListener(baseViewDrawListener);
+                                            removeDrawListener(viewTreeObserver, baseViewDrawListener);
                                         } else {
                                             if (boxCustom != null) {
-                                                boxCustom.getViewTreeObserver().removeOnDrawListener(baseViewDrawListener);
+                                                removeDrawListener(boxCustom.getViewTreeObserver(), baseViewDrawListener);
                                             }
                                         }
                                         baseViewDrawListener = null;
@@ -542,6 +542,16 @@ public class CustomDialog extends BaseDialog {
         }
     }
 
+    private void removeDrawListener(ViewTreeObserver viewTreeObserver, ViewTreeObserver.OnDrawListener listener) {
+        if (viewTreeObserver == null || listener == null || !viewTreeObserver.isAlive()) {
+            return;
+        }
+        try {
+            viewTreeObserver.removeOnDrawListener(listener);
+        } catch (Exception e) {
+        }
+    }
+
     private Animation getEnterAnimation() {
         Animation enterAnim;
         if (enterAnimResId == R.anim.anim_dialogx_default_enter &&
@@ -780,10 +790,10 @@ public class CustomDialog extends BaseDialog {
             if (getDialogImpl() != null && getDialogImpl().boxCustom != null) {
                 if (baseViewDrawListener != null) {
                     if (viewTreeObserver != null) {
-                        viewTreeObserver.removeOnDrawListener(baseViewDrawListener);
+                        removeDrawListener(viewTreeObserver, baseViewDrawListener);
                     } else {
                         if (getDialogImpl().boxCustom != null) {
-                            getDialogImpl().boxCustom.getViewTreeObserver().removeOnDrawListener(baseViewDrawListener);
+                            removeDrawListener(getDialogImpl().boxCustom.getViewTreeObserver(), baseViewDrawListener);
                         }
                     }
                     baseViewDrawListener = null;
@@ -1032,15 +1042,14 @@ public class CustomDialog extends BaseDialog {
      * 用于使用 new 构建实例时,override 的生命周期事件
      * 例如:
      * new CustomDialog() {
-     *     @Override
-     *     public void onShow(CustomDialog dialog) {
-     *         //...
-     *     }
-     * }
      *
      * @param dialog self
+     * @Override public void onShow(CustomDialog dialog) {
+     * //...
+     * }
+     * }
      */
-    public void onShow(CustomDialog dialog){
+    public void onShow(CustomDialog dialog) {
 
     }
 
@@ -1048,23 +1057,23 @@ public class CustomDialog extends BaseDialog {
      * 用于使用 new 构建实例时,override 的生命周期事件
      * 例如:
      * new CustomDialog() {
-     *     @Override
-     *     public boolean onDismiss(CustomDialog dialog) {
-     *         WaitDialog.show("Please Wait...");
-     *         if (dialog.getButtonSelectResult() == BUTTON_SELECT_RESULT.BUTTON_OK) {
-     *             //点击了OK的情况
-     *             //...
-     *         } else {
-     *             //其他按钮点击、对话框dismiss的情况
-     *             //...
-     *         }
-     *         return false;
-     *     }
-     * }
+     *
      * @param dialog self
+     * @Override public boolean onDismiss(CustomDialog dialog) {
+     * WaitDialog.show("Please Wait...");
+     * if (dialog.getButtonSelectResult() == BUTTON_SELECT_RESULT.BUTTON_OK) {
+     * //点击了OK的情况
+     * //...
+     * } else {
+     * //其他按钮点击、对话框dismiss的情况
+     * //...
+     * }
+     * return false;
+     * }
+     * }
      */
     //用于使用 new 构建实例时,override 的生命周期事件
-    public void onDismiss(CustomDialog dialog){
+    public void onDismiss(CustomDialog dialog) {
 
     }
 }

+ 15 - 5
DialogX/src/main/java/com/kongzue/dialogx/dialogs/PopMenu.java

@@ -255,7 +255,7 @@ public class PopMenu extends BaseDialog {
                         }
                     } else {
                         if (viewTreeObserver != null) {
-                            viewTreeObserver.removeOnDrawListener(this);
+                            removeDrawListener(viewTreeObserver, this);
                             viewTreeObserver = null;
                             baseViewDrawListener = null;
                         }
@@ -621,10 +621,10 @@ public class PopMenu extends BaseDialog {
                                 if (value == 0f) {
                                     if (baseViewDrawListener != null) {
                                         if (viewTreeObserver != null) {
-                                            viewTreeObserver.removeOnDrawListener(baseViewDrawListener);
+                                            removeDrawListener(viewTreeObserver, baseViewDrawListener);
                                         } else {
                                             if (baseView != null) {
-                                                baseView.getViewTreeObserver().removeOnDrawListener(baseViewDrawListener);
+                                                removeDrawListener(baseView.getViewTreeObserver(), baseViewDrawListener);
                                             }
                                         }
                                         baseViewDrawListener = null;
@@ -814,6 +814,16 @@ public class PopMenu extends BaseDialog {
         }
     }
 
+    private void removeDrawListener(ViewTreeObserver viewTreeObserver, ViewTreeObserver.OnDrawListener listener) {
+        if (viewTreeObserver == null || listener == null || !viewTreeObserver.isAlive()) {
+            return;
+        }
+        try {
+            viewTreeObserver.removeOnDrawListener(listener);
+        } catch (Exception e) {
+        }
+    }
+
     private int getBodyRealHeight() {
         if (getDialogImpl() == null) {
             return 0;
@@ -846,10 +856,10 @@ public class PopMenu extends BaseDialog {
         if (dialogView != null) {
             if (baseViewDrawListener != null) {
                 if (viewTreeObserver != null) {
-                    viewTreeObserver.removeOnDrawListener(baseViewDrawListener);
+                    removeDrawListener(viewTreeObserver, baseViewDrawListener);
                 } else {
                     if (baseView != null) {
-                        baseView.getViewTreeObserver().removeOnDrawListener(baseViewDrawListener);
+                        removeDrawListener(baseView.getViewTreeObserver(), baseViewDrawListener);
                     }
                 }
                 baseViewDrawListener = null;