Parcourir la source

[FAQ][Bug] refatoring

hyodong.min il y a 7 ans
Parent
commit
3492519efc

+ 20 - 91
app/src/main/java/kr/co/zumo/app/lifeplus/view/fragment/faq/FAQExpandableListViewAdapter.java

@@ -1,14 +1,10 @@
 package kr.co.zumo.app.lifeplus.view.fragment.faq;
 
-import android.graphics.Typeface;
 import android.support.annotation.NonNull;
 import android.support.v7.widget.RecyclerView;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
 
 import java.util.List;
 
@@ -25,7 +21,7 @@ import kr.co.zumo.app.lifeplus.bean.api.FAQBean;
  * @history 하세미   [2018-10-01]   [최초 작성]
  * @since 2018-10-01
  */
-public class FAQExpandableListViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
+public class FAQExpandableListViewAdapter extends RecyclerView.Adapter<FAQExpandableViewHolder> {
 
   private List<FAQBean> data;
   private RecyclerView recyclerView;
@@ -43,7 +39,7 @@ public class FAQExpandableListViewAdapter extends RecyclerView.Adapter<RecyclerV
 
   @NonNull
   @Override
-  public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+  public FAQExpandableViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
     View view = LayoutInflater
       .from(parent.getContext())
       .inflate(R.layout.faq_question_list, parent, false);
@@ -51,62 +47,31 @@ public class FAQExpandableListViewAdapter extends RecyclerView.Adapter<RecyclerV
   }
 
   private FAQExpandableViewHolder openedHolder = null;
-  private FAQBean openedBean = null;
+  private int openedIndex = -1;
 
   @Override
-  public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
+  public void onBindViewHolder(@NonNull FAQExpandableViewHolder holder, int position) {
 
-    FAQExpandableViewHolder viewHolder = ((FAQExpandableViewHolder) holder);
+    FAQExpandableViewHolder viewHolder = holder;
     FAQBean bean = data.get(position);
-    viewHolder.bind(bean);
-    viewHolder.textViewQuestion.setOnClickListener(new View.OnClickListener() {
-      @Override
-      public void onClick(View view) {
-
-        boolean isExpanded = bean.isExpanded();
-        bean.setExpanded(!isExpanded);
-        viewHolder.changed(bean.isExpanded());
-
-        if (null != openedHolder) {
-          openedBean.setExpanded(false);
-          openedHolder.changed(false);
-          openedBean = null;
-          openedHolder = null;
-        }
-
-        if (bean.isExpanded()) {
-          openedHolder = viewHolder;
-          openedBean = bean;
-        }
-
-        // 홀더의 영역이 뷰안으로 들어오도록 스크롤 시킨다.
-        recyclerView.scrollToPosition(position);
-      }
-    });
-
-    viewHolder.buttonArrow.setOnClickListener(new View.OnClickListener() {
-      @Override
-      public void onClick(View view) {
+    viewHolder.bind(bean, event -> {
 
-        boolean isExpanded = bean.isExpanded();
-        bean.setExpanded(!isExpanded);
-        viewHolder.changed(bean.isExpanded());
-
-        if (null != openedHolder) {
-          openedBean.setExpanded(false);
-          openedHolder.changed(false);
-          openedBean = null;
-          openedHolder = null;
-        }
-
-        if (bean.isExpanded()) {
-          openedHolder = viewHolder;
-          openedBean = bean;
-        }
+      if (null != openedHolder) {
+        FAQBean openedBean = data.get(openedIndex);
+        openedBean.setExpanded(false);
+        openedHolder.changed(false);
+        openedHolder = null;
+      }
 
-        // 홀더의 영역이 뷰안으로 들어오도록 스크롤 시킨다.
-        recyclerView.scrollToPosition(position);
+      int index = event.getInteger();
+      FAQBean selectedBean = data.get(index);
+      if (selectedBean.isExpanded()) {
+        openedHolder = viewHolder;
+        openedIndex = index;
       }
+
+      // 홀더의 영역이 뷰안으로 들어오도록 스크롤 시킨다.
+      recyclerView.scrollToPosition(index);
     });
   }
 
@@ -115,40 +80,4 @@ public class FAQExpandableListViewAdapter extends RecyclerView.Adapter<RecyclerV
     return data.size();
   }
 
-  private class FAQExpandableViewHolder extends RecyclerView.ViewHolder {
-
-    private TextView textViewCategory;
-    private TextView textViewQuestion;
-    private ImageView buttonArrow;
-    private RelativeLayout layoutAnswer;
-    private TextView textViewAnswer;
-
-    public FAQExpandableViewHolder(View itemView) {
-      super(itemView);
-      textViewCategory = itemView.findViewById(R.id.faq_category);
-      textViewQuestion = itemView.findViewById(R.id.faq_question);
-      buttonArrow = itemView.findViewById(R.id.button_open_arrow);
-      layoutAnswer = itemView.findViewById(R.id.layout_answer);
-      textViewAnswer = itemView.findViewById(R.id.faq_answer);
-    }
-
-    private void bind(FAQBean faqBean) {
-      textViewAnswer.setText(faqBean.getContents());
-      textViewQuestion.setText(faqBean.getTitle());
-      textViewCategory.setText(faqBean.getCategory());
-    }
-
-    private void changed(boolean isExpanded) {
-      if (isExpanded) {
-        layoutAnswer.setVisibility(View.VISIBLE);
-        textViewQuestion.setTypeface(null ,Typeface.BOLD);
-      }
-      else {
-        layoutAnswer.setVisibility(View.GONE);
-        textViewQuestion.setTypeface(null ,Typeface.NORMAL);
-      }
-      buttonArrow.setImageResource(isExpanded ? R.drawable.icon_closearrow : R.drawable.icon_openarrow);
-
-    }
-  }
 }

+ 77 - 0
app/src/main/java/kr/co/zumo/app/lifeplus/view/fragment/faq/FAQExpandableViewHolder.java

@@ -0,0 +1,77 @@
+/*
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
+ */
+package kr.co.zumo.app.lifeplus.view.fragment.faq;
+
+import android.graphics.Typeface;
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import kr.co.zumo.app.R;
+import kr.co.zumo.app.lifeplus.bean.api.FAQBean;
+import kr.co.zumo.app.lifeplus.view.Event;
+import kr.co.zumo.app.lifeplus.view.IEventListener;
+
+/**
+ * FAQExpandableViewHolder
+ * <pre>
+ * </pre>
+ *
+ * @author 민효동
+ * @version 1.0
+ * @history 민효동   [2018. 10. 24.]   [최초 작성]
+ * @since 2018. 10. 24.
+ */
+
+public class FAQExpandableViewHolder extends RecyclerView.ViewHolder {
+
+  private TextView textViewCategory;
+  private TextView textViewQuestion;
+  private ImageView buttonArrow;
+  private RelativeLayout layoutAnswer;
+  private TextView textViewAnswer;
+
+  public FAQExpandableViewHolder(View itemView) {
+    super(itemView);
+    textViewCategory = itemView.findViewById(R.id.faq_category);
+    textViewQuestion = itemView.findViewById(R.id.faq_question);
+    buttonArrow = itemView.findViewById(R.id.button_open_arrow);
+    layoutAnswer = itemView.findViewById(R.id.layout_answer);
+    textViewAnswer = itemView.findViewById(R.id.faq_answer);
+  }
+
+  public void bind(FAQBean faqBean, IEventListener listener) {
+    textViewAnswer.setText(faqBean.getContents());
+    textViewQuestion.setText(faqBean.getTitle());
+    textViewCategory.setText(faqBean.getCategory());
+
+    View.OnClickListener clickListener = view -> {
+      boolean isExpanded = faqBean.isExpanded();
+      faqBean.setExpanded(!isExpanded);
+      changed(faqBean.isExpanded());
+
+      listener.onEvent(new Event.Builder(Event.CLICK).integer(getAdapterPosition()).build());
+
+    };
+
+    textViewQuestion.setOnClickListener(clickListener);
+
+    buttonArrow.setOnClickListener(clickListener);
+  }
+
+  public void changed(boolean isExpanded) {
+    if (isExpanded) {
+      layoutAnswer.setVisibility(View.VISIBLE);
+      textViewQuestion.setTypeface(null ,Typeface.BOLD);
+    }
+    else {
+      layoutAnswer.setVisibility(View.GONE);
+      textViewQuestion.setTypeface(null ,Typeface.NORMAL);
+    }
+    buttonArrow.setImageResource(isExpanded ? R.drawable.icon_closearrow : R.drawable.icon_openarrow);
+
+  }
+}