2013-12-17 1 views
1

두 개의 다른 일반 목록 (확장 데이터가 /assets/ 인 확장 가능한 목록과 데이터베이스에서 데이터를 가져온 목록)을 보여주는 확장 가능한 목록을 만들고 싶습니다. 일러스트 :ExpandableList 그룹에 두 개의 서로 다른 어댑터를 포함하는 어댑터가 있습니다

enter image description here

나는 이것에 대해 이동하는 방법을 정말 모르겠습니다. BaseExpandableListAdapter을 연장하고 두 어댑터를 그룹으로 제공하면 notifyDataSetChanged으로 전화를 걸어 ExpandableListAdapter으로 바꿀 수 있습니까? 또한 하위 목록에 꼬리말을 표시하려면이를 행으로 추가해야한다고 가정합니다. 이게 효과가 있니? 더 나은 대안이 있습니까?

답변

2

확실! 이 클래스를 시작점으로 사용하십시오 :

출신 그룹이 무엇이든 상관없이 하위보기가 재활용된다는 사실을주의하십시오.

public static class MergeAdapter extends BaseExpandableListAdapter { 
    private final List<Adapter> adapters = new ArrayList<Adapter>(2); 
    private final Context ctx; 

    public MergeAdapter(Context ctx) { 
     List<String> firstList = new ArrayList<String>(3); 
     firstList.add("one"); 
     firstList.add("two"); 
     firstList.add("three"); 
     List<String> secondList = new ArrayList<String>(3); 
     secondList.add("fo'"); 
     secondList.add("five"); 
     secondList.add("six"); 

     adapters.add(new ArrayAdapter<String>(ctx, android.R.layout.simple_list_item_1, firstList)); 
     adapters.add(new ArrayAdapter<String>(ctx, android.R.layout.simple_list_item_1, secondList)); 
     this.ctx = ctx; 
    } 

    @Override 
    public int getGroupCount() { 
     return adapters.size(); 
    } 

    @Override 
    public int getChildrenCount(int i) { 
     return adapters.get(i).getCount(); 
    } 

    @Override 
    public Adapter getGroup(int i) { 
     return adapters.get(i); 
    } 

    @Override 
    public Object getChild(int i, int i2) { 
     return adapters.get(i).getItem(i2); 
    } 

    @Override 
    public long getGroupId(int i) { 
     return i; 
    } 

    @Override 
    public long getChildId(int i, int i2) { 
     return adapters.get(i).getItemId(i2); 
    } 

    @Override 
    public boolean hasStableIds() { 
     //In our case true, but for dynamic data likely to be false 
     return false; 
    } 

    @Override 
    public View getGroupView(int i, boolean isExpanded, View view, ViewGroup viewGroup) { 
     if (view == null) { 
      LayoutInflater inflater = LayoutInflater.from(ctx); 
      //Better to use layout custom-made for expandable lists... 
      view = inflater.inflate(android.R.layout.simple_list_item_1, viewGroup, false); 
     } 
     TextView tv = (TextView) view.findViewById(android.R.id.text1); 
     tv.setText("List " + i); 
     return view; 
    } 

    @Override 
    public View getChildView(int i, int i2, boolean isLastView, View view, ViewGroup viewGroup) { 
     //isLastView will be handy if you want to make a footer 
     return adapters.get(i).getView(i2, view, viewGroup); 
    } 

    @Override 
    public boolean isChildSelectable(int i, int i2) { 
     //Customize 
     return true; 
    } 
}