소스 검색

0.0.49.beta10
- 完善 OnBindView 内部逻辑,当dialog和view相同时不重复执行onBind事件;
- WaitDialog新增onShow(DialogXRunnable)和onDismiss(DialogXRunnable);
- 尝试修复可能存在的问题;

0.0.49.beta9
- 菜单布局结构优化;

0.0.49.beta8
- 对话框内的 dialogView 引用进行了处理,以及 PopTip 的 baseView,减少在低版本安卓系统上出现内存泄漏的可能性
- FullScreenDialog 新增了方法 hideActivityContentView(boolean) 用于设置是否在显示 FullScreenDialog 时不对 activity 的界面内容进行渲染,这将提升一定的性能,此方法只可以在使用 build 方法构建且在执行show方法之前使用,但这将引发一些问题,例如输入法弹出时 FullScreenDialog 无法上浮等;
- 其他问题修复;

0.0.49.beta6
- 对 BottomMenu 的 setOkButton、setCancelButton、setOtherButton 提供了单独的 OnBottomMenuButtonClickListener 参数接口,可直接提供 BottomMenu 参数的 onClick 回调事件;
- BottomDialog/BottomMenu 新增 set/get OkTextInfo 和 OtherTextInfo 方法;
- 修复 DialogXBaseRelativeLayout 可能存在的嵌套循环调用 requestFocus() 方法的问题;
- 修复关于 WaitDialog 设置背景颜色不生效的问题;

0.0.49.beta5 ready
- ActivityScreenShotImageView 增加静态方法 useHardwareRenderingMode,开启可使用硬件加速渲染模式;
- 修复部分系统下 ActivityScreenShotImageView 在执行回收时触发的“Software rendering doesn't support hardware bitmaps.”异常;
- 其他问题修复;

0.0.49.beta4 ready
- 修复部分系统下 BlurRelativeLayout 或 BlurRelativeLayout 在执行回收时触发的“Calling RS with no Context active.”异常;
- ActivityScreenShotImageView 截图方案更新;

0.0.49.beta4 ready
- 修复在部分设备上由 DialogXBaseRelativeLayout 引发的 StackOverflowError,此问题猜测跟特定版本系统固件存在问题有关;

0.0.49.beta3
- 修复 ActivityScreenShotImageView 可能引发的“Software rendering doesn’t support hardware bitmaps” 异常;
- 修复 BottomDialog/FullScreenDialog 的滑动事件在内部存在 ScrollController 时,若触摸位置处于 ScrollController 布局外无法滑动对话框的问题;

0.0.49.beta2
- InputInfo新增方法:`getInputFilters()`、`setInputFilters(InputFilter[] inputFilters)`、`addInputFilter(InputFilter inputFilter)` 和 `removeInputFilter(InputFilter inputFilter)`(issues:332);
- 尝试性修复 DialogFragment 模式实现下的 WaitDialog 内存泄漏问题(issues:334);
- 修复关于DialogFragmentImpl引发的空指针问题此问题(issues:335);

0.0.49.beta1
- 修复 BlurRelativeLayout 和 BlurLinearLayout 在 iOS 主题下使用 DialogFragment 模式时存在的渲染宽度和高度 <=0 导致的异常(issues:324);
- 修复 IOS 主题下可能存在的 `RSInvalidStateException: Calling RS with no Context active` 异常问题(issues:327);
- 修复可能存在的高频启关对话框过程中,因UI未完成构建被关闭引发的空指针异常(issues:331);

Kongzue 1 년 전
부모
커밋
ff903142c0

+ 4 - 2
DialogX/src/main/java/com/kongzue/dialogx/dialogs/CustomDialog.java

@@ -229,8 +229,10 @@ public class CustomDialog extends BaseDialog {
             boxRoot.post(new Runnable() {
                 @Override
                 public void run() {
-                    getDialogXAnimImpl().doShowAnim(CustomDialog.this, boxCustom);
-                    if (getDialogImpl().boxCustom != null) {
+                    if (getDialogXAnimImpl() != null) {
+                        getDialogXAnimImpl().doShowAnim(CustomDialog.this, boxCustom);
+                    }
+                    if (getDialogImpl() != null && getDialogImpl().boxCustom != null) {
                         getDialogImpl().boxCustom.setVisibility(View.VISIBLE);
                     }
 

+ 7 - 6
DialogX/src/main/java/com/kongzue/dialogx/dialogs/PopTip.java

@@ -348,11 +348,11 @@ public class PopTip extends BaseDialog implements NoTouchInterface {
                         overrideExitDuration
                 ) : exitAnimDuration;
             }
-           View dialogView = createView(layoutResId);
+            View dialogView = createView(layoutResId);
             dialogImpl = new DialogImpl(dialogView);
             if (dialogView != null) dialogView.setTag(me);
             show(dialogView);
-        }else{
+        } else {
             show(getDialogView());
         }
         return this;
@@ -407,11 +407,11 @@ public class PopTip extends BaseDialog implements NoTouchInterface {
                         overrideExitDuration
                 ) : exitAnimDuration;
             }
-           View dialogView = createView(layoutResId);
+            View dialogView = createView(layoutResId);
             dialogImpl = new DialogImpl(dialogView);
             if (dialogView != null) dialogView.setTag(me);
             show(activity, dialogView);
-        }else{
+        } else {
             show(activity, getDialogView());
         }
         return this;
@@ -786,12 +786,13 @@ public class PopTip extends BaseDialog implements NoTouchInterface {
     private void waitForDismiss() {
         preRecycle = true;
         if (popTipList != null) {
-            for (PopTip popTip : popTipList) {
+            CopyOnWriteArrayList<PopTip> copyPopTipList = new CopyOnWriteArrayList<>(popTipList);
+            for (PopTip popTip : copyPopTipList) {
                 if (!popTip.preRecycle) {
                     return;
                 }
             }
-            for (PopTip popTip : new CopyOnWriteArrayList<>(popTipList)) {
+            for (PopTip popTip : copyPopTipList) {
                 dismiss(popTip.getDialogView());
             }
         }

+ 15 - 37
DialogX/src/main/java/com/kongzue/dialogx/dialogs/WaitDialog.java

@@ -31,6 +31,7 @@ import com.kongzue.dialogx.interfaces.BlurViewType;
 import com.kongzue.dialogx.interfaces.DialogConvertViewInterface;
 import com.kongzue.dialogx.interfaces.DialogLifecycleCallback;
 import com.kongzue.dialogx.interfaces.DialogXAnimInterface;
+import com.kongzue.dialogx.interfaces.DialogXRunnable;
 import com.kongzue.dialogx.interfaces.DialogXStyle;
 import com.kongzue.dialogx.interfaces.OnBackPressedListener;
 import com.kongzue.dialogx.interfaces.OnBackgroundMaskClickListener;
@@ -372,8 +373,9 @@ public class WaitDialog extends BaseDialog {
 
                             onDialogShow();
                             getDialogLifecycleCallback().onShow(WaitDialog.this);
-                            WaitDialog.this.onShow(WaitDialog.this);
-
+                            if (onShowRunnable != null) {
+                                onShowRunnable.run(WaitDialog.this);
+                            }
                             setLifecycleState(Lifecycle.State.RESUMED);
                         }
                     });
@@ -697,7 +699,9 @@ public class WaitDialog extends BaseDialog {
     public void cleanInstance() {
         isShow = false;
         getDialogLifecycleCallback().onDismiss(WaitDialog.this);
-        WaitDialog.this.onDismiss(WaitDialog.this);
+        if (onDismissRunnable != null) {
+            onDismissRunnable.run(WaitDialog.this);
+        }
         if (dialogImpl != null) dialogImpl.clear();
         dialogImpl = null;
         if (dialogView != null) dialogView.clear();
@@ -1200,42 +1204,16 @@ public class WaitDialog extends BaseDialog {
         return this;
     }
 
-    /**
-     * 用于使用 new 构建实例时,override 的生命周期事件
-     * 例如:
-     * new WaitDialog() {
-     *
-     * @param dialog self
-     * @Override public void onShow(WaitDialog dialog) {
-     * //...
-     * }
-     * }
-     */
-    public void onShow(WaitDialog dialog) {
+    DialogXRunnable<WaitDialog> onShowRunnable;
+    DialogXRunnable<WaitDialog> onDismissRunnable;
 
+    public WaitDialog onShow(DialogXRunnable<WaitDialog> dialogXRunnable) {
+        onShowRunnable = dialogXRunnable;
+        return this;
     }
 
-    /**
-     * 用于使用 new 构建实例时,override 的生命周期事件
-     * 例如:
-     * new WaitDialog() {
-     *
-     * @param dialog self
-     * @Override public boolean onDismiss(WaitDialog dialog) {
-     * WaitDialog.show("Please Wait...");
-     * if (dialog.getButtonSelectResult() == BUTTON_SELECT_RESULT.BUTTON_OK) {
-     * //点击了OK的情况
-     * //...
-     * } else {
-     * //其他按钮点击、对话框dismiss的情况
-     * //...
-     * }
-     * return false;
-     * }
-     * }
-     */
-    //用于使用 new 构建实例时,override 的生命周期事件
-    public void onDismiss(WaitDialog dialog) {
-
+    public WaitDialog onDismiss(DialogXRunnable<WaitDialog> dialogXRunnable) {
+        onDismissRunnable = dialogXRunnable;
+        return this;
     }
 }

+ 7 - 0
DialogX/src/main/java/com/kongzue/dialogx/interfaces/DialogXRunnable.java

@@ -0,0 +1,7 @@
+package com.kongzue.dialogx.interfaces;
+
+public interface DialogXRunnable<D> {
+
+    void run(D dialog);
+
+}

+ 11 - 1
DialogX/src/main/java/com/kongzue/dialogx/interfaces/OnBindView.java

@@ -175,7 +175,7 @@ public abstract class OnBindView<D> {
             lp = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
         }
         parentView.addView(getCustomView(), lp);
-        onBind((D) dialog, getCustomView());
+        callOnBind((D) dialog, parentView);
         if (fragment != null || supportFragment != null) {
             if (dialog.getDialogImplMode() != DialogX.IMPL_MODE.VIEW) {
                 BaseDialog.error(dialog.dialogKey() + "非 VIEW 实现模式不支持 fragment 作为子布局显示。\n" +
@@ -204,6 +204,16 @@ public abstract class OnBindView<D> {
         }
     }
 
+    private int dialogHash, parentViewHash;
+
+    private void callOnBind(D dialog, ViewGroup parentView) {
+        if (dialog.hashCode() != dialogHash || parentView.hashCode() != parentViewHash) {
+            dialogHash = dialog.hashCode();
+            parentViewHash = parentView.hashCode();
+            onBind(dialog, getCustomView());
+        }
+    }
+
     private Runnable waitBindRunnable;
 
     private void waitBind(ViewGroup parentView, BaseDialog dialog) {

+ 1 - 0
app/src/main/java/com/kongzue/dialogxdemo/activity/MainActivity.java

@@ -65,6 +65,7 @@ import com.kongzue.dialogx.interfaces.BaseDialog;
 import com.kongzue.dialogx.interfaces.BottomDialogSlideEventLifecycleCallback;
 import com.kongzue.dialogx.interfaces.DialogLifecycleCallback;
 import com.kongzue.dialogx.interfaces.DialogXAnimInterface;
+import com.kongzue.dialogx.interfaces.DialogXRunnable;
 import com.kongzue.dialogx.interfaces.MenuItemTextInfoInterceptor;
 import com.kongzue.dialogx.interfaces.OnBackPressedListener;
 import com.kongzue.dialogx.interfaces.OnBackgroundMaskClickListener;