2011-10-02 4 views
0

내 expandableListAdapter에서 그룹을 동적으로 생성하고 삭제할 수 있어야합니다. 나는 내가 찾아 낼 수있는 모든 것들을 보았다. 필자는 특정 코드가 필요 없지만 올바른 방향으로 향하게해야합니다.ExpandableListAdapter 그룹 추가/삭제

답변

3

먼저, 몇 가지 데이터 구조가 필요합니다 (나중에 사용하기 위해이 구조를 참조하십시오).

headerData = new ArrayList<HashMap<String, String>>(); 
childData = new ArrayList<ArrayList<HashMap<String, Object>>>(); 

headerData 그룹의리스트 인 - 각 그룹은 각각의 키에 의한 레이아웃에 매핑되며, 복수의 디스플레이 된 값을 가질 수 있기 때문에 HashMap에 사용된다.

childData는 각 그룹에 속한 항목의 목록입니다. HashMaps를 포함하고있는 목록의 목록 - 그룹과 마찬가지로 각 자식은 키로 매핑되는 여러 표시 값을 가질 수 있습니다.

우리는 이러한 데이터 구조를 생성시 ExpandableListAdapter에 제공합니다. 또한 디스플레이 값을 매핑하는 방법을 어댑터에 알려줍니다. 이 예에서 그룹과 하위는 모두 제공된 레이아웃의 text1과 text2에 매핑되는 "name"및 "fields"키라는 두 가지 표시 값을가집니다.

adapter = new SimpleExpandableListAdapter(SearchLogs.this, 
     headerData, R.layout.customlayout_group, 
     new String[] { "name", "fields" }, new int[] { R.id.text1, R.id.text2 }, 
     childData, R.layout.customlayout_child, 
    new String[] { "name", "fields" }, new int[] { R.id.text1, R.id.text2 }); 
setListAdapter(adapter); // assuming you are using ExpandableListActivity 

지금까지는 비어있는 확장형 목록이 있습니다. 우리는 사용중인 키의 값을 제공하고 목록에 추가하는 HashMaps를 생성하여 동적으로 (AsyncTask를 사용하여) 데이터를 채울 수 있습니다.

예를 들어, ... 우리가 수도 몇 아이들과 함께 그룹을 추가하는

HashMap<String, String> group = new HashMap<String, String>(); 
group.put("name", "whatever..."); 
group.put("fields", "..."); 

ArrayList<HashMap<String, Object>> groupChildren = new ArrayList<HashMap<String, Object>>(); 

HashMap<String, Object> child1 = new HashMap<String, Object>(); 
child1.put("name", "child name"); 
child1.put("fields", "..."); 

HashMap<String, Object> child2 = new HashMap<String, Object>(); 
child2.put("name", "another child"); 

groupChildren.add(child1); 
groupChildren.add(child2); 

headerData.add(group); 
childData.add(groupChildren); 

실제를 정의하는 추가 HashMaps을을 포함 childData의 ArrayList를,로 (주문에 의해) headerData의 대응의 각의 HashMap 어린이. 따라서 빈 그룹을 추가하는 경우에도 해당하는 (빈) ArrayList를 childData에 추가해야합니다.

목록의 끝에 그룹을 추가했습니다. headerData와 childData에서 같은 위치에 삽입하는 것을 염두에두기 만하면 쉽게 삽입 할 수 있습니다. 그룹을 제거하는 것은 동일합니다. headerData와 childData의 동일한 위치에서 제거해야합니다.

마지막으로 데이터가 변경되었음을 어댑터에 알리면 List가 새로 고쳐집니다. AsyncTask를 사용하는 경우 doInBackground 외부에서 수행해야합니다 (이 경우 onProgressUpdate 사용).

adapter.notifyDataSetChanged(); 

나는 이것이 당신이 올바른 방향으로 이동하는 데 도움이되기를 바랍니다. ExpandableList는 데이터 저장 방식 측면에서 볼 때 더 복잡한 Android보기 중 하나입니다.