浏览代码

[공통][New] 다이얼로그 - 커스텀 리스너 시작

hyodong.min 7 年之前
父节点
当前提交
a392a6bac4

+ 10 - 1
app/src/main/java/kr/co/zumo/app/lifeplus/view/dialog/DialogBase.java

@@ -18,7 +18,8 @@ import kr.co.zumo.app.R;
  * @history 민효동   [2018. 9. 14.]   [최초 작성]
  * @since 2018. 9. 14.
  */
-public abstract class DialogBase extends DialogFragment {
+public abstract class DialogBase<CL extends ICustomDialogListener> extends DialogFragment {
+  private CL customListener;
   private IDialogResultListener resultListener;
   private boolean isDismissed = false;
 
@@ -30,6 +31,14 @@ public abstract class DialogBase extends DialogFragment {
     this.resultListener = resultListener;
   }
 
+  public CL getCustomListener() {
+    return customListener;
+  }
+
+  public void setCustomListener(CL customListener) {
+    this.customListener = customListener;
+  }
+
   /**
    * dismiss 확인
    *

+ 23 - 10
app/src/main/java/kr/co/zumo/app/lifeplus/view/dialog/DialogBuilder.java

@@ -20,15 +20,16 @@ import kr.co.zumo.app.lifeplus.view.dialog.factory.IDialogFactory;
  * @history 민효동   [2018-09-23]   [최초 작성]
  * @since 2018-09-23
  */
-public class DialogBuilder {
+public class DialogBuilder<T extends DialogBase, CL extends ICustomDialogListener> {
 
   private IDialogFactory factory;
   private int dialogId;
   private FragmentManager manager;
-  private IDialogResultListener listener;
-  private IAttribute attribute;
+  private IDialogResultListener<T> listener;
+  private IAttribute<T> attribute;
+  private CL customListener;
 
-  private DialogBuilder(@DialogID.ID int dialogId) {
+  public DialogBuilder(@DialogID.ID int dialogId) {
     this.dialogId = dialogId;
   }
 
@@ -71,11 +72,22 @@ public class DialogBuilder {
    * @param listener IDialogResultListener
    * @return DialogBuilder
    */
-  public DialogBuilder listener(IDialogResultListener listener) {
+  public DialogBuilder listener(IDialogResultListener<T> listener) {
     this.listener = listener;
     return this;
   }
 
+  /**
+   * 다이얼로그 별로 사용할 수 있는 CustomListener 등록
+   *
+   * @param listener ICustomDialogListener
+   * @return DialogBuilder
+   */
+  public DialogBuilder listener(CL listener) {
+    this.customListener = listener;
+    return this;
+  }
+
   /**
    * 다이얼로그 show 이전에 속성(메서드)를 지정한다.
    *
@@ -92,18 +104,19 @@ public class DialogBuilder {
    *
    * @return DialogBase
    */
-  public DialogBase build() {
+  public T build() {
     if (null == factory) {
-      factory = new BasicDialogFactory();
+      factory = new BasicDialogFactory<T>();
     }
     if (null == manager) {
       manager = DialogHelper.getInstance().getFragmentManager();
     }
-    DialogBase dialog = factory.getDialogById(dialogId);
+    T dialog = (T)factory.getDialogById(dialogId);
     if (null != attribute) {
       attribute.onAttribute(dialog);
     }
     dialog.setResultListener(listener);
+    dialog.setCustomListener(customListener);
 
     return dialog;
   }
@@ -113,8 +126,8 @@ public class DialogBuilder {
    *
    * @return DialogBase
    */
-  public DialogBase show() {
-    DialogBase dialog = build();
+  public T show() {
+    T dialog = build();
     try {
       // fixme 백그라운드에서 팝업을 열려고 시도할 경우, commit 오류가 발생한다.
       // -> 1. 백그라운드에서는 팝업을 열려는 시도 자체를 하지 못하도록 함 (observable dispose 등)

+ 17 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/dialog/ICustomDialogListener.java

@@ -0,0 +1,17 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.view.dialog;
+
+/**
+ * ICustomDialogListener
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2018. 11. 5.]   [최초 작성]
+ * @since 2018. 11. 5.
+ */
+public interface ICustomDialogListener {
+}

+ 21 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/dialog/ICustomFilterListener.java

@@ -0,0 +1,21 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.view.dialog;
+
+import java.util.ArrayList;
+
+/**
+ * ICustomFilterListener
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2018. 11. 5.]   [최초 작성]
+ * @since 2018. 11. 5.
+ */
+public interface ICustomFilterListener extends ICustomDialogListener {
+
+  void onFilterResult(ArrayList<Integer> list);
+}

+ 3 - 3
app/src/main/java/kr/co/zumo/app/lifeplus/view/dialog/factory/BasicDialogFactory.java

@@ -27,10 +27,10 @@ import kr.co.zumo.app.lifeplus.view.dialog.WebDialog;
  * @history 민효동   [2018-09-23]   [최초 작성]
  * @since 2018-09-23
  */
-public class BasicDialogFactory implements IDialogFactory {
+public class BasicDialogFactory<T extends DialogBase> implements IDialogFactory<T> {
 
   @Override
-  public DialogBase getDialogById(@DialogID.ID int id) {
+  public T getDialogById(@DialogID.ID int id) {
     DialogBase dialog;
     switch (id) {
       case DialogID.WEB:
@@ -70,6 +70,6 @@ public class BasicDialogFactory implements IDialogFactory {
         throw new Error("Unsupported dialog.");
     }
 
-    return dialog;
+    return (T) dialog;
   }
 }

+ 2 - 2
app/src/main/java/kr/co/zumo/app/lifeplus/view/dialog/factory/IDialogFactory.java

@@ -16,6 +16,6 @@ import kr.co.zumo.app.lifeplus.view.dialog.DialogID;
  * @history 민효동   [2018-09-23]   [최초 작성]
  * @since 2018-09-23
  */
-public interface IDialogFactory {
-  DialogBase getDialogById(@DialogID.ID int id);
+public interface IDialogFactory<T extends DialogBase> {
+  T getDialogById(@DialogID.ID int id);
 }