正文
一、結構
public abstract class SimpleExpandableListAdapter extends BaseExpandableListAdapter
java.lang.Object
android.widget.BaseExpandableListAdapter
android.widget.SimpleExpandableListAdapter
二、概述
一個使用Map存儲組元素和子元素的靜态資料,使用XML資源檔案定義組元素和子元素View如何顯示的簡單擴充卡。你可以區分指定組元素傳回的資料是List<Map>類型。在ArrayList中的每個實體對應ExpandalbeList中的一個組。實體中的Map清單包含了組下的每行資料。你也可以指定一個XML檔案來定義用于在組元素的View的顯示。此時Map中的鍵值将與指定的View(XML中定義的view id)對應起來。子元素的處理情況類似。注意當可折疊的深度若不隻1層,傳回的資料将被指定為List類型。首個List對應子元素中所代表的組,第二個List對應孫子元素在子元素組中的位置。Map亦将支援這樣的特殊元素。(子元素嵌套組元素的情況)
(譯者注:ExpandableList支援深度大于1的情況。在andorid自帶的ApiDomos的例子中有這個的代碼:App/View/ExpandableList3)。
三、構造函數
public SimpleExpandableListAdapter(Contextcontext,List<? extends Map<String, ?>> groupData, int groupLayout,String[]groupFrom, int[] groupTo,List<? extends List<? extends Map<String, ?>>> childData, int childLayout,String[]childFrom, int[] childTo)
構造函數
參數
groupData 一個Maps清單(List)。集合中的每個字典項與可折疊清單中的每個組元素一緻。字典項提供了組元素包含的所有資料,并包含所有在"groupFrom"中指定的記錄。
groupLayout 顯示組元素的資源檔案。該資源檔案定義了如何顯示組元素。該布局檔案必須至少包括groupTo中所定義的View。(即groupTo中的View id數組必須都在該布局檔案中找到)
groupFrom 一個鍵值清單。對應與組相關聯的Map中的鍵值。
grouptTo 組View應當顯示groupFrom參數中的所有列資料。這些資料應當都用TextView來顯示。清單中的前N個View從前N個groupFrom參數獲得列元素的資料。
childData 一個Map清單的清單。外部清單中的每個實體對應一個組(按照組的位置編号)。在内部清單的每個實體對應某個組的子元素(按照子元素的位置編号)。該Map對應了子元素的資料。(按照childFrom數組中的值編号)。該Map包含了每個子元素的資料,并且應當包括所有在childFrom中指定的實體。
childLayout 顯示子元素的資源檔案。該資源檔案定義了如何顯示子元素。布局檔案至少應該包括所有在childTo中定義的View。(即childTo中的view id數組必須都在該布局檔案中找到)
childFrom 定義顯示子元素的列名。該列名與childData中的子元素屬性(字典鍵值)對應。
childTo 子View應當顯示childFrom參數中的所有列資料。這些資料應當都用TextView來顯示。清單中的前N個View從前N個childFrom參數獲得列元素的資料。
public SimpleExpandableListAdapter (Context context, List<? extends Map<String, ?>> groupData, int expandedGroupLayout, int collapsedGroupLayout, String[] groupFrom, int[] groupTo, List<? extends List<? extends Map<String, ?>>> childData, int childLayout, String[] childFrom, int[] childTo)
構造函數。
參數
context 與SimpleExpandableListAdapter關聯的ExpandableListView的上下文。
expandedGroupLayout 定義組展開時的View的XML資源布局。該布局檔案應當至少包括所有在groupTo中所定義的View。(即groupTo中的View id數組必須都在該布局檔案中找到)
collapasedGroupLayout 定義組折疊時的View的XML資源布局。該布局檔案應當至少包括所有在groupTo中所定義的View。(即groupTo中的View id數組必須都在該布局檔案中找到)
childData 一個Map清單的清單。外部清單中的每個實體對應一個組(按照組的位置編号)。在内部清單的每個實體對應某個組的子元素(按照子元素的位置編号)。該Map對應了子元素的資料。(按照childFrom數組中的值編号)。該Map包含了每個子元素的資料,并且應當包括所有在childFrom中指定的實體。
public SimpleExpandableListAdapter(Contextcontext,List<? extends Map<String, ?>> groupData, int expandedGroupLayout, int collapsedGroupLayout,String[]groupFrom, int[] groupTo,List<? extends List<? extends Map<String, ?>>> childData, int childLayout, int lastChildLayout,String[]childFrom, int[] childTo)
參數
context 與SimpleExpandableListAdapter關聯的ExpandableListView的上下文。
groupData 一個Maps清單(List)。集合中的每個字典項與可折疊清單中的每個組元素一緻。字典項提供了組元素包含的所有資料,并包含所有在"groupFrom"中指定的記錄。
expandedGroupLayout 定義組展開時的View的XML資源布局。該布局檔案應當至少包括所有在groupTo中所定義的View。(即groupTo中的View id數組必須都在該布局檔案中找到)
collapasedGroupLayout 定義組折疊時的View的XML資源布局。該布局檔案應當至少包括所有在groupTo中所定義的View。(即groupTo中的View id數組必須都在該布局檔案中找到)
groupFrom 一個鍵值清單。對應與組相關聯的Map中的鍵值。
grouptTo 組View應當顯示groupFrom參數中的所有列資料。這些資料應當都用TextView來顯示。清單中的前N個View從前N個groupFrom參數獲得列元素的資料。
childData 一個Map清單的清單。外部清單中的每個實體對應一個組(按照組的位置編号)。在内部清單的每個實體對應某個組的子元素(按照子元素的位置編号)。該Map對應了子元素的資料。(按照childFrom數組中的值編号)。該Map包含了每個子元素的資料,并且應當包括所有在childFrom中指定的實體。
childLayout 顯示子元素的資源檔案。該資源檔案定義了如何顯示子元素。布局檔案至少應該包括所有在childTo中定義的View。(即childTo中的view id數組必須都在該布局檔案中找到)
lastChildLayout 定義每組中最後一個子元素的View資源布局情況。該布局檔案應當至少包括所有在childTo中所定義的View。(即childTo中的View id數組必須都在該布局檔案中找到)
childFrom 定義顯示子元素的列名。該列名與childData中的子元素屬性(字典鍵值)對應。
childTo 子View應當顯示childFrom參數中的所有列資料。這些資料應當都用TextView來顯示。清單中的前N個View從前N個childFrom參數獲得列元素的資料。
四、公共方法
public long getChildId (int groupPosition, int childPosition)
(譯者注:擷取與在給定組給予孩子相關的資料。)
(譯者注:擷取子項)
public int getChildrenCount (int groupPosition)
(譯者注:傳回在指定Group的Child數目。)
public int getGroupCount ()
(譯者注:傳回Group的總數目。)
public long getGroupId (int groupPosition)
(譯者注:擷取父項)
public boolean hasStableIds ()
public boolean isChildSelectable (int groupPosition, int childPosition)
(譯者注:是否讓child獲得焦點)
建立一個子元素View。
參數
isLastChild 該child是否是組中的最後一個元素
parent 新的View的最終父親。
傳回
新的子元素View對象。
public View newGroupView (boolean isExpanded, ViewGroup parent)
建立一個組元素View。
參數
isExpanded 該組元素是否目前處于折疊狀态
parent 新View的最終父親。
傳回
新的組元素View對象。
五、補充
文章精選
示例代碼:
List<Map<String, String>> groupData = new ArrayList<Map<String, String>>();
List<List<Map<String, String>>> childData = new ArrayList<List<Map<String, String>>>();
for (int i = 0; i < 20; i++) {
Map<String, String> curGroupMap = new HashMap<String, String>();
groupData.add(curGroupMap);
curGroupMap.put(NAME, "Group " + i);
curGroupMap.put(IS_EVEN, (i % 2 == 0) ? "This group is even" : "This group is odd");
List<Map<String, String>> children = new ArrayList<Map<String, String>>();
for (int j = 0; j < 15; j++) {
Map<String, String> curChildMap = new HashMap<String, String>();
children.add(curChildMap);
curChildMap.put(NAME, "Child " + j);
curChildMap.put(IS_EVEN, (j % 2 == 0) ? "This child is even" : "This child is odd");
}
childData.add(children);
}
// Set up our adapter
mAdapter = new SimpleExpandableListAdapter(
this,
groupData,
android.R.layout.simple_expandable_list_item_1,
new String[] { NAME, IS_EVEN },
new int[] { android.R.id.text1, android.R.id.text2 },
childData,
android.R.layout.simple_expandable_list_item_2,
new int[] { android.R.id.text1, android.R.id.text2 }
);
本文轉自over140 51CTO部落格,原文連結:http://blog.51cto.com/over140/582403,如需轉載請自行聯系原作者