天天看點

Android中文API(95)——SimpleExpandableListAdapter

正文

  一、結構

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,如需轉載請自行聯系原作者

繼續閱讀