2011-10-02 39 views
0

我需要能夠動態地在我的expandableListAdapter中創建和刪除組。我查看了所有可以找到的信息並將其卡住。我不需要特定的代碼,只是要指出正確的方向。ExpandableListAdapter添加/刪除組

回答

3

首先,我們需要一些數據結構(保留對它們的引用以備後用)。

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

headerData是組的列表 - HashMap中使用,因爲每個組可以具有多個顯示值,其中的每一個被映射到由鍵佈局。

childData是屬於每個組的項目列表。它是一個列表列表,每個列表都包含HashMaps - 與組類似,每個子項可以具有多個由鍵映射的顯示值。

我們在創建時將這些數據結構提供給我們的ExpandableListAdapter。我們還告訴適配器應如何映射顯示值;在這個例子中,組和孩子都有兩個顯示值,分別是關鍵字「name」和「fields」,它們被映射到提供的佈局中的text1和text2上。

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 

到目前爲止,我們有一個空的ExpandableList。我們可以通過創建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); 

在headerData對應(按順序)每個HashMap來在childData一個ArrayList,其中包含定義實際額外包含HashMap兒童。所以即使你添加了一個空組,記得要向childData添加一個對應的(空的)ArrayList。

我們只是在列表的末尾添加了一個組 - 只要我們注意插入headerData和childData中的相同位置,我們就可以輕鬆插入。刪除組是相同的 - 一定要從headerData和childData的相同位置刪除。

最後,通知適配器數據已更改,這將導致List刷新。如果使用AsyncTask,則必須在doInBackground之外完成(在這種情況下使用onProgressUpdate)。

adapter.notifyDataSetChanged(); 

我希望這可以幫助您朝着正確的方向前進。就數據存儲方式而言,ExpandableList絕對是更復雜的Android視圖之一。