마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

ExpandableListView 제목에 맞춰 내용이 나오게 하고 싶습니다

0 추천


메인 입니다   
    private ArrayList<String> mGroupList = null;
    private ArrayList<ArrayList<String>> mChildList = null;
    private ArrayList<String> mChildListContent = null;
  
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_notice);
  
        setLayout();
  
        mGroupList = new ArrayList<>();
        mChildList = new ArrayList<>();
        mChildListContent = new ArrayList<>();
  
        mGroupList.add("제목1");
        mGroupList.add("제목2");
        mGroupList.add("제목3");
  
        mChildListContent.add("내용1");
        mChildListContent.add("내용2");
        mChildListContent.add("내용3");
  
        mChildList.add(mChildListContent);
        mChildList.add(mChildListContent);
        mChildList.add(mChildListContent);
  
        mListView.setAdapter(new BaseExpandableAdapter(this, mGroupList, mChildList));
  
어댑터 부분입니다.
  
package com.kit.BSMoiso.sample;
  
import android.content.Context;
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;
  
public class BaseExpandableAdapter extends BaseExpandableListAdapter{
   
 private ArrayList<String> groupList = null;
 private ArrayList<ArrayList<String>> childList = null;
 private LayoutInflater inflater = null;
 private ViewHolder viewHolder = null;
   
 public BaseExpandableAdapter(Context c, ArrayList<String> groupList, 
   ArrayList<ArrayList<String>> childList){
  super();
  this.inflater = LayoutInflater.from(c);
  this.groupList = groupList;
  this.childList = childList;
 }
   
 // 그룹 포지션을 반환한다.
 @Override
 public String getGroup(int groupPosition) {
  return groupList.get(groupPosition);
 }
  
 // 그룹 사이즈를 반환한다.
 @Override
 public int getGroupCount() {
  return groupList.size();
 }
  
 // 그룹 ID를 반환한다.
 @Override
 public long getGroupId(int groupPosition) {
  return groupPosition;
 }
  
 // 그룹뷰 각각의 ROW 
 @Override
 public View getGroupView(int groupPosition, boolean isExpanded,
   View convertView, ViewGroup parent) {
    
  View v = convertView;
    
  if(v == null){
   viewHolder = new ViewHolder();
   v = inflater.inflate(R.layout.list_row, parent, false);
   viewHolder.tv_groupName = (TextView) v.findViewById(R.id.tv_group);
   viewHolder.iv_image = (ImageView) v.findViewById(R.id.iv_image);
   v.setTag(viewHolder);
  }else{
   viewHolder = (ViewHolder)v.getTag();
  }
    
  // 그룹을 펼칠때와 닫을때 아이콘을 변경해 준다.
  if(isExpanded){
   viewHolder.iv_image.setImageResource(R.drawable.ic_expand_more_black_36dp);
  }else{
   viewHolder.iv_image.setImageResource(R.drawable.ic_chevron_right_black_36dp);
  }
    
  viewHolder.tv_groupName.setText(getGroup(groupPosition));
    
  return v;
 }
  
  
// 차일드뷰를 반환한다.
 @Override
 public String getChild(int groupPosition, int childPosition) {
  return childList.get(groupPosition).get(childPosition);
 }
   
 // 차일드뷰 사이즈를 반환한다.
 @Override
 public int getChildrenCount(int groupPosition) {
  return childList.get(groupPosition).size();
 }
  
 // 차일드뷰 ID를 반환한다.
 @Override
 public long getChildId(int groupPosition, int childPosition) {
  return childPosition;
 }
  
 // 차일드뷰 각각의 ROW
 @Override
 public View getChildView(int groupPosition, int childPosition,
   boolean isLastChild, View convertView, ViewGroup parent) {
    
  View v = convertView;
    
  if(v == null){
   viewHolder = new ViewHolder();
   v = inflater.inflate(R.layout.list_row, null);
   viewHolder.tv_childName = (TextView) v.findViewById(R.id.tv_child);
   v.setTag(viewHolder);
  }else{
   viewHolder = (ViewHolder)v.getTag();
  }
    
  viewHolder.tv_childName.setText(getChild(groupPosition, childPosition));
    
  return v;
 }
  
 @Override
 public boolean hasStableIds() { return true; }
  
 @Override
 public boolean isChildSelectable(int groupPosition, int childPosition) { return true; }
   
 class ViewHolder {
  public ImageView iv_image;
  public TextView tv_groupName;
  public TextView tv_childName;
 }
  
}

제가 소스를 이해를 못해서 그런지 왜 child가 모든 expandable에 동일하게 나오는지 모르겠네요....
메인에서 add 하면 그 add한 내용이 모든 expandable에 나와 버립니다

가령 -제목1

        -내용1

        -내용2

        -제목2

        -내용1

        -내용2

이런식으로 내용이 제목1과 2 둘다 같이 나옵니다

  -제목1

  -내용1

  -제목2

  -내용2

이런식으로 안되구요...

mChildListContent.add("내용1");
mChildListContent.add("내용2");
mChildListContent.add("내용3");

아무래도 이부분 때문인거 같은데 각각 제목과 내용이 같을 배열끼리 붙어서 리스트뷰가 나오게 할수 있을까요?
소스나 잘못된 부분 설명해주시면 감사하겠습니다
 
좋은하루되세요

 

 
   
   

 

도그풋러 (640 포인트) 님이 2015년 5월 13일 질문

1개의 답변

0 추천
 
채택된 답변
private ArrayList<String> mChildListContent1 = null; 
//제목1용 자식내용 리스트
private ArrayList<String> mChildListContent2 = null; 
//제목2용 자식내용 리스트
mChildListContent1.add("내용1"); //제목1-내용1
mChildListContent2.add("내용2"); //제목2-내용2

private ArraList<ArrayList<String>> mChildList = null;
mChildList.add(mChildContent1);
mChildList.add(mChildContent2);

/*
그룹별로 자식을 따로 하고싶으면 자식내용리스트도 각각 만들어줘야합니다.
자식내용리스트 1개로 전부 다 써먹어서 똑같이 나온겁니다.
*/

 

 

어렵군요 (5,920 포인트) 님이 2015년 5월 14일 답변
어렵군요님이 2015년 5월 14일 수정
...