Browse Source

0.0.50.beta23.pre1
- 修复诸多 window 模式下的问题;
- 修复在 MaterialYou 主题下,BottomMenu 同时设置了菜单图标以及复选时,最后一项右侧出现异常空白的问题;
- 修复 PopTip、PopNotification 中 waitForDismiss 方法可能存在的空指针异常

Kongzue 4 tháng trước cách đây
mục cha
commit
6a77d65391

+ 24 - 6
DialogX/src/main/java/com/kongzue/dialogx/dialogs/PopNotification.java

@@ -45,7 +45,9 @@ import com.kongzue.dialogx.util.views.DialogXBaseRelativeLayout;
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Objects;
 import java.util.Timer;
 import java.util.TimerTask;
 import java.util.concurrent.CopyOnWriteArrayList;
@@ -955,15 +957,31 @@ public class PopNotification extends BaseDialog implements NoTouchInterface {
      * 等待所有 popNotification 处于待回收状态时一并回收可以避免此问题
      */
     private void waitForDismiss() {
+        if (popNotificationList == null || popNotificationList.isEmpty()) {
+            return;
+        }
         preRecycle = true;
-        if (popNotificationList != null) {
-            for (PopNotification popNotification : popNotificationList) {
-                if (!popNotification.preRecycle) {
-                    return;
+        CopyOnWriteArrayList<PopNotification> copyPopNotificationList = new CopyOnWriteArrayList<>(popNotificationList);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+            copyPopNotificationList.removeIf(Objects::isNull);
+        }else{
+            Iterator<PopNotification> iterator = copyPopNotificationList.iterator();
+            while (iterator.hasNext()) {
+                if (iterator.next() == null) {
+                    iterator.remove();
                 }
             }
-            for (PopNotification popNotification : new CopyOnWriteArrayList<>(popNotificationList)) {
-                dismiss(popNotification.getDialogView());
+        }
+        boolean allPreRecycled = true;
+        for (PopNotification popTip : copyPopNotificationList) {
+            if (!popTip.preRecycle) {
+                allPreRecycled = false;
+                break;
+            }
+        }
+        if (allPreRecycled) {
+            for (PopNotification popTip : copyPopNotificationList) {
+                dismiss(popTip.getDialogView());
             }
         }
     }

+ 22 - 5
DialogX/src/main/java/com/kongzue/dialogx/dialogs/PopTip.java

@@ -42,7 +42,9 @@ import com.kongzue.dialogx.util.views.DialogXBaseRelativeLayout;
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Objects;
 import java.util.Timer;
 import java.util.TimerTask;
 import java.util.concurrent.CopyOnWriteArrayList;
@@ -802,14 +804,29 @@ public class PopTip extends BaseDialog implements NoTouchInterface {
      * 等待所有 PopTip 处于待回收状态时一并回收可以避免此问题
      */
     private void waitForDismiss() {
+        if (popTipList == null || popTipList.isEmpty()) {
+            return;
+        }
         preRecycle = true;
-        if (popTipList != null) {
-            CopyOnWriteArrayList<PopTip> copyPopTipList = new CopyOnWriteArrayList<>(popTipList);
-            for (PopTip popTip : copyPopTipList) {
-                if (!popTip.preRecycle) {
-                    return;
+        CopyOnWriteArrayList<PopTip> copyPopTipList = new CopyOnWriteArrayList<>(popTipList);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+            copyPopTipList.removeIf(Objects::isNull);
+        }else{
+            Iterator<PopTip> iterator = copyPopTipList.iterator();
+            while (iterator.hasNext()) {
+                if (iterator.next() == null) {
+                    iterator.remove();
                 }
             }
+        }
+        boolean allPreRecycled = true;
+        for (PopTip popTip : copyPopTipList) {
+            if (!popTip.preRecycle) {
+                allPreRecycled = false;
+                break;
+            }
+        }
+        if (allPreRecycled) {
             for (PopTip popTip : copyPopTipList) {
                 dismiss(popTip.getDialogView());
             }