Kaynağa Gözat

0.0.50.beta24 pre
- 修复PopMenu在未绑定baseView而指定setAlignGravity会出现的空指针异常;
- 修复DialogListBuilder可能存在的空指针风险;

Kongzue 7 ay önce
ebeveyn
işleme
9630fcfea6

+ 19 - 11
DialogX/src/main/java/com/kongzue/dialogx/util/DialogListBuilder.java

@@ -12,54 +12,62 @@ import java.util.ArrayList;
  * @createTime: 2022/8/8 15:08
  */
 public class DialogListBuilder {
-    
+
     ArrayList<BaseDialog> dialogs;
-    
+
     public static DialogListBuilder create(BaseDialog... dialogs) {
         DialogListBuilder builder = new DialogListBuilder();
         for (BaseDialog d : dialogs) {
-            builder.add(d);
+            if (d != null) builder.add(d);
         }
         return builder;
     }
-    
+
     public DialogListBuilder add(BaseDialog dialog) {
         if (dialogs == null) {
             dialogs = new ArrayList<>();
         }
-        if (dialog.isShow() || dialog.isPreShow()) {
+        if (dialog == null || dialog.isShow() || dialog.isPreShow()) {
             return this;
         }
         dialog.setDialogListBuilder(this);
         dialogs.add(dialog);
         return this;
     }
-    
+
     public DialogListBuilder show() {
         if (dialogs == null || dialogs.isEmpty()) {
             return this;
         }
+        while (!dialogs.isEmpty() && dialogs.get(0) == null) {
+            dialogs.remove(0);
+        }
         dialogs.get(0).show();
         return this;
     }
-    
+
     public void showNext() {
         if (dialogs == null || dialogs.isEmpty()) {
             return;
         }
-        dialogs.remove(dialogs.get(0));
-        if (!dialogs.isEmpty()) {
+        while (!dialogs.isEmpty() && dialogs.get(0) == null) {
+            dialogs.remove(0);
+        }
+        if (!dialogs.isEmpty() && dialogs.get(0) != null) {
             dialogs.get(0).show();
         }
     }
-    
+
     public boolean isEmpty() {
         if (dialogs == null) {
             return true;
         }
+        while (!dialogs.isEmpty() && dialogs.get(0) == null) {
+            dialogs.remove(0);
+        }
         return dialogs.isEmpty();
     }
-    
+
     public void clear() {
         dialogs.clear();
     }