Sfoglia il codice sorgente

[FAQ][Common] FAQ 게시판 리싸이클러뷰로 변경 중

Hasemi 7 anni fa
parent
commit
2bf23a4bae

+ 0 - 6
app/src/main/java/kr/co/zumo/app/lifeplus/activity/FAQActivity.java

@@ -18,16 +18,10 @@ public class FAQActivity extends AppCompatActivity {
   protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_faq);
-    //getSupportFragmentManager().beginTransaction().replace(R.id.faq_container, new FAQFragment()).commit();
 
     tabLayoutFaq = findViewById(R.id.faq_tab_layout);
     viewPagerFaq = findViewById(R.id.faq_view_pager);
     tabLayoutFaq.setTabGravity(TabLayout.GRAVITY_FILL);
-//    tabLayoutFaq.addTab(tabLayoutFaq.newTab().setText("ALL"));
-//    tabLayoutFaq.addTab(tabLayoutFaq.newTab().setText("회원"));
-//    tabLayoutFaq.addTab(tabLayoutFaq.newTab().setText("혜택"));
-//    tabLayoutFaq.addTab(tabLayoutFaq.newTab().setText("기타"));
-
 
     String[] tab = {"전체", "회원", "혜택", "기타"};
     faqPagerAdapter = new FAQPagerAdapter(getSupportFragmentManager(), tab);

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

@@ -1,16 +1,18 @@
 package kr.co.zumo.app.lifeplus.view.fragment.faq;
 
 import android.content.Context;
+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.BaseExpandableListAdapter;
+import android.widget.ImageView;
 import android.widget.TextView;
 
 import java.util.ArrayList;
+import java.util.List;
 
 import kr.co.zumo.app.R;
-import kr.co.zumo.app.lifeplus.bean.api.FAQBean;
 
 /**
  * FaqExpandableListViewAdapter
@@ -22,75 +24,144 @@ import kr.co.zumo.app.lifeplus.bean.api.FAQBean;
  * @history 하세미   [2018-10-01]   [최초 작성]
  * @since 2018-10-01
  */
-public class FAQExpandableListViewAdapter extends BaseExpandableListAdapter {
+public class FAQExpandableListViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
 
-  private Context context;
-  private ArrayList<FAQBean> faqList;
-  private LayoutInflater inflater = null;
+  public static final int QUESTION = 1;
+  public static final int ANSWER = 2;
+  private List<Item> faqList;
+  private LayoutInflater inflater;
 
-  public FAQExpandableListViewAdapter(Context context, ArrayList<FAQBean> faqList) {
-    this.context = context;
+
+  public FAQExpandableListViewAdapter(List<Item> faqList) {
     this.faqList = faqList;
-    this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
   }
 
+  @NonNull
   @Override
-  public int getGroupCount() {
-    return faqList.size();
-  }
+  public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+    View view = null;
+    Context context = parent.getContext();
+
+    float dp = context.getResources().getDisplayMetrics().density;
+    int subItemPaddingLeft = (int) (18 * dp);
+    int subItemPaddingTopAndBottom = (int) (5 * dp);
+
+    switch (viewType) {
+      //카테고리 들어오면 question layout 부터 세팅
+      case QUESTION:
+        inflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+        view = inflater.inflate(R.layout.faq_question_list, parent, false);
+        FAQExpandableListViewViewHolder questionViewHolder = new FAQExpandableListViewViewHolder(view);
+        return questionViewHolder;
+      case ANSWER:
+        TextView textViewAnswer = new TextView(context);
+        textViewAnswer.setPadding(subItemPaddingLeft, subItemPaddingTopAndBottom, 0, subItemPaddingTopAndBottom);
+        textViewAnswer.setTextColor(0x88000000);
+        textViewAnswer.setLayoutParams(
+          new ViewGroup.LayoutParams(
+            ViewGroup.LayoutParams.MATCH_PARENT,
+            ViewGroup.LayoutParams.WRAP_CONTENT));
+        return new RecyclerView.ViewHolder(textViewAnswer) {};
+      default:
+        break;
 
-  @Override
-  public int getChildrenCount(int i) {
-    return faqList.size();
+    }
+    return null;
   }
 
   @Override
-  public Object getGroup(int i) {
-    return faqList.get(i);
+  public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
+    final Item item = faqList.get(position);
+    switch (item.type) {
+      case QUESTION:
+        final FAQExpandableListViewViewHolder viewHolder = (FAQExpandableListViewViewHolder) holder;
+        viewHolder.refferalItem = item;
+        viewHolder.textViewCategory.setText(item.category);
+        viewHolder.textViewQuestion.setText(item.contents);
+        if (item.invisibleChildren == null) {
+          viewHolder.buttonOpenArrow.setImageResource(R.drawable.icon_openarrow);
+        }
+        else {
+          viewHolder.buttonOpenArrow.setImageResource(R.drawable.icon_closearrow);
+        }
+        viewHolder.buttonOpenArrow.setOnClickListener(new View.OnClickListener() {
+          @Override
+          public void onClick(View view) {
+            if (item.invisibleChildren == null) {
+              item.invisibleChildren = new ArrayList<Item>();
+              int count = 0;
+              int pos = faqList.indexOf(viewHolder.refferalItem);
+              while (faqList.size() > pos + 1 && faqList.get(pos + 1).type == ANSWER) {
+                item.invisibleChildren.add(faqList.remove(pos + 1));
+                count++;
+              }
+              notifyItemRangeRemoved(pos + 1, count);
+              viewHolder.buttonOpenArrow.setImageResource(R.drawable.icon_openarrow);
+            }
+            else {
+              int pos = faqList.indexOf(viewHolder.refferalItem);
+              int index = pos + 1;
+              for (Item i : item.invisibleChildren) {
+                faqList.add(index, i);
+                index++;
+              }
+              notifyItemRangeInserted(pos + 1, index - pos - 1);
+              viewHolder.buttonOpenArrow.setImageResource(R.drawable.icon_closearrow);
+              item.invisibleChildren = null;
+
+            }
+          }
+        });
+        break;
+      case ANSWER:
+        TextView textViewAnswer = (TextView) holder.itemView;
+        textViewAnswer.setText(faqList.get(position).contents);
+        break;
+      default:
+        break;
+    }
   }
 
-  @Override
-  public Object getChild(int i, int i1) {
-    return faqList.get(i);
-  }
 
   @Override
-  public long getGroupId(int i) {
-    return i;
+  public int getItemViewType(int position) {
+    return faqList.get(position).type;
   }
 
   @Override
-  public long getChildId(int i, int i1) {
-    return i1;
-  }
-
-  @Override
-  public boolean hasStableIds() {
-    return true;
+  public int getItemCount() {
+    return faqList.size();
   }
 
-  @Override
-  public View getGroupView(int groupPosition, boolean isExpanded, View view, ViewGroup parent) {
-    if (view == null) {
-      view = inflater.inflate(R.layout.faq_question_list, parent, false);
+  private static class FAQExpandableListViewViewHolder extends RecyclerView.ViewHolder {
+    public TextView textViewCategory;
+    public TextView textViewQuestion;
+    public TextView textViewAnswer;
+    public ImageView buttonOpenArrow;
+    public Item refferalItem;
+
+    public FAQExpandableListViewViewHolder(View itemView) {
+      super(itemView);
+      textViewCategory = itemView.findViewById(R.id.faq_category);
+      textViewQuestion = itemView.findViewById(R.id.faq_question);
+      textViewAnswer = itemView.findViewById(R.id.faq_answer);
+      buttonOpenArrow = itemView.findViewById(R.id.button_open_arrow);
     }
-    TextView textViewQuestion = (TextView) view.findViewById(R.id.faq_question);
-    textViewQuestion.setText(faqList.get(groupPosition).getTitle());
-    return view;
   }
 
-  @Override
-  public View getChildView(int groupPosition, int childPosition, boolean isExpanded, View view, ViewGroup parent) {
-    if (view == null) {
-      view = inflater.inflate(R.layout.faq_answer_list, parent, false);
+  public static class Item {
+    public int type;
+    public String category;
+    public String contents;
+    public List<Item> invisibleChildren;
+
+    public Item() {
     }
-    TextView textViewAnswer = (TextView) view.findViewById(R.id.faq_answer);
-    textViewAnswer.setText(faqList.get(0).getContents());
-    return view;
-  }
 
-  @Override
-  public boolean isChildSelectable(int i, int i1) {
-    return false;
+    public Item(int type, String category, String contents) {
+      this.type = type;
+      this.category = category;
+      this.contents = contents;
+    }
   }
 }

+ 23 - 24
app/src/main/java/kr/co/zumo/app/lifeplus/view/fragment/faq/FAQFragment.java

@@ -4,16 +4,16 @@ import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.v4.app.Fragment;
-import android.util.Log;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.ExpandableListView;
 
 import java.util.ArrayList;
+import java.util.List;
 
 import kr.co.zumo.app.R;
-import kr.co.zumo.app.lifeplus.bean.api.FAQBean;
 
 /**
  * FaqFragment
@@ -27,32 +27,31 @@ import kr.co.zumo.app.lifeplus.bean.api.FAQBean;
  */
 public class FAQFragment extends Fragment {
 
-  private ExpandableListView expandableListViewFaq;
-  private ArrayList<FAQBean> faqList;
+  private RecyclerView expandableListViewFaq;
+
 
 
   @Nullable
   @Override
   public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
     View view = inflater.inflate(R.layout.fragment_faq, container, false);
-    settingList();
-    expandableListViewFaq = (ExpandableListView) view.findViewById(R.id.expandable_list_view_faq);
-    FAQExpandableListViewAdapter adapter = new FAQExpandableListViewAdapter(getActivity(), faqList);
+    //settingList();
+
+
+    expandableListViewFaq = (RecyclerView) view.findViewById(R.id.expandable_list_view_faq);
+    expandableListViewFaq.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL ,false));
+    List<FAQExpandableListViewAdapter.Item> data = new ArrayList<>();
+
+
+    data.add(new FAQExpandableListViewAdapter.Item(FAQExpandableListViewAdapter.QUESTION, "회원","비밀번호는 어떻게 변경하나요?"));
+    data.add(new FAQExpandableListViewAdapter.Item(FAQExpandableListViewAdapter.ANSWER, "회원","답변1"));
+    data.add(new FAQExpandableListViewAdapter.Item(FAQExpandableListViewAdapter.QUESTION, "회원","비밀번호는 어떻게 변경하나요?"));
+    data.add(new FAQExpandableListViewAdapter.Item(FAQExpandableListViewAdapter.ANSWER, "회원","답변1"));
+    data.add(new FAQExpandableListViewAdapter.Item(FAQExpandableListViewAdapter.QUESTION, "회원","비밀번호는 어떻게 변경하나요?"));
+    data.add(new FAQExpandableListViewAdapter.Item(FAQExpandableListViewAdapter.ANSWER, "회원","답변1"));
+
+    FAQExpandableListViewAdapter adapter = new FAQExpandableListViewAdapter(data);
     expandableListViewFaq.setAdapter(adapter);
-    expandableListViewFaq.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {
-      @Override
-      public void onGroupExpand(int i) {
-        Log.e("APP#  FAQFragment | onGroupExpand", "|" + i);
-        expandableListViewFaq.setDividerHeight(0);
-      }
-    });
-
-    expandableListViewFaq.setOnGroupCollapseListener(new ExpandableListView.OnGroupCollapseListener() {
-      @Override
-      public void onGroupCollapse(int i) {
-        expandableListViewFaq.setDividerHeight(30);
-      }
-    });
 
     return view;
   }
@@ -62,11 +61,11 @@ public class FAQFragment extends Fragment {
     super.onActivityCreated(savedInstanceState);
   }
 
-  private void settingList() {
+/*  private void settingList() {
     faqList = new ArrayList<>();
     FAQBean bean1 = new FAQBean(0, "회원", "비밀번호는 어떻게 변경하나요?", "개인인증을 위한 정보(이름, 휴대폰 번호)를 입력 받고, 당첨 시 입력하신 번호로 경품 당첨 내용을 전송하오니 정확한 본인의 이름과 전화번호를 입력해 주시기 바랍니다. 당첨자는 추첨을 통해 선정되며 9월 28일자 발표일에 경품이 주어집니다.", "dummy");
     faqList.add(bean1);
     FAQBean bean2 = new FAQBean(0, "회원", "비밀번호는 어떻게 변경하나요?", "개인인증을 위한 정보(이름, 휴대폰 번호)를 입력 받고, 당첨 시 입력하신 번호로 경품 당첨 내용을 전송하오니 정확한 본인의 이름과 전화번호를 입력해 주시기 바랍니다. 당첨자는 추첨을 통해 선정되며 9월 28일자 발표일에 경품이 주어집니다.", "dummy");
     faqList.add(bean2);
-  }
+  }*/
 }

+ 6 - 6
app/src/main/java/kr/co/zumo/app/lifeplus/view/fragment/faq/FAQPagerAdapter.java

@@ -15,12 +15,12 @@ import android.support.v4.app.FragmentStatePagerAdapter;
  * @history 하세미   [2018-10-01]   [최초 작성]
  * @since 2018-10-01
  */
-public class FAQPagerAdapter extends FragmentStatePagerAdapter{
+public class FAQPagerAdapter extends FragmentStatePagerAdapter {
 
-  private String [] tab;
+  private String[] tab;
+  private static final int PAGE_COUNT = 4;
 
-  public FAQPagerAdapter(FragmentManager fm, String [] tab)
-  {
+  public FAQPagerAdapter(FragmentManager fm, String[] tab) {
     super(fm);
     this.tab = tab;
   }
@@ -33,12 +33,12 @@ public class FAQPagerAdapter extends FragmentStatePagerAdapter{
 
   @Override
   public int getCount() {
-    return 4;
+    return PAGE_COUNT;
   }
 
   @Nullable
   @Override
   public CharSequence getPageTitle(int position) {
-    return  tab[position];
+    return tab[position];
   }
 }

+ 2 - 0
app/src/main/res/layout/activity_faq.xml

@@ -12,6 +12,8 @@
   <android.support.design.widget.TabLayout
   android:id="@+id/faq_tab_layout"
   android:layout_width="match_parent"
+  android:layout_marginRight="25dp"
+  android:layout_marginLeft="25dp"
   android:layout_height="55dp"
   app:tabGravity="center"/>
 

+ 23 - 4
app/src/main/res/layout/faq_question_list.xml

@@ -2,16 +2,16 @@
 <LinearLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
-  android:layout_height="match_parent"
-  android:orientation="vertical">
+  android:layout_height="wrap_content"
+  android:orientation="horizontal">
+
 
   <LinearLayout
-    android:layout_width="match_parent"
+    android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:paddingLeft="23dp"
     android:paddingTop="23dp"
     android:paddingBottom="23dp"
-    android:background="@drawable/faq_text_border"
     android:orientation="vertical">
 
     <TextView
@@ -36,5 +36,24 @@
 
   </LinearLayout>
 
+  <LinearLayout
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:orientation="horizontal">
+
+    <ImageView
+      android:id="@+id/button_open_arrow"
+      android:layout_width="wrap_content"
+      android:layout_height="match_parent"
+      android:paddingTop="40dp"
+      android:paddingBottom="40dp"
+      android:layout_marginLeft="86dp"
+      android:src="@drawable/icon_openarrow"
+
+      />
+
+
+  </LinearLayout>
+
 
 </LinearLayout>

+ 2 - 2
app/src/main/res/layout/fragment_faq.xml

@@ -8,7 +8,7 @@
   android:background="@color/CFFFFFF"
   android:orientation="vertical">
 
-  <ExpandableListView
+  <android.support.v7.widget.RecyclerView
     android:id="@+id/expandable_list_view_faq"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
@@ -18,7 +18,7 @@
     android:dividerHeight="12dp"
     android:divider="@color/CFFFFFF">
 
-  </ExpandableListView>
+  </android.support.v7.widget.RecyclerView>
 
 
 </LinearLayout>