实现展开列ExpandableListView的三种方式之SimpleExpandableListAdapter实例

实现可扩展展开列ExpandableListView的三种方式

一是使用SimpleExpandableListAdpater将两个List集合包装成ExpandableListView
二是 扩展BaseExpandableListAdpter

三是使用simpleCursorTreeAdapter将Cursor中的数据包装成SimpleCuroTreeAdapter

 

SimpleExpandableListAdpater的几个构造函数说明

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)

第一个参数  应用程序接口 this
第二个父列List<?extends Map<String,Object>>集合 为父列提供数据
第三个参数  父列显示的组件资源文件
第四个参数  键值列表 父列Map字典的key
第五个要显示的父列组件id
第六个 子列的显示资源文件
第七个参数 键值列表的子列Map字典的key
第八个要显示子列的组件id

 

[html][/html] view plaincopy

  1. <?xml version=”1.0″ encoding=”utf-8″?>
  2. <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
  3.     android:layout_width=”wrap_content”
  4.     android:layout_height=”wrap_content”
  5.     android:orientation=”horizontal” >
  6.     <ImageView
  7.         android:id=”@+id/image1″
  8.         android:layout_width=”wrap_content”
  9.         android:layout_height=”wrap_content” />
  10.     <TextView
  11.         android:id=”@+id/txt1″
  12.        android:paddingLeft=”10dp”
  13.         android:layout_width=”wrap_content”
  14.         android:layout_height=”wrap_content” />
  15. </LinearLayout>

 

[html][/html] view plaincopy

  1. <?xml version=”1.0″ encoding=”utf-8″?>
  2. <TextView xmlns:android=”http://schemas.android.com/apk/res/android”
  3.     android:id=”@+id/items”
  4.     android:layout_width=”wrap_content”
  5.     android:layout_height=”wrap_content” >
  6. </TextView>

 

[java][/java] view plaincopy

  1. package com.android.xiong.expandablelistviewtest;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import java.util.Map;
  6. import android.app.Activity;
  7. import android.os.Bundle;
  8. import android.view.Menu;
  9. import android.widget.ExpandableListView;
  10. import android.widget.SimpleExpandableListAdapter;
  11. public class MainActivity extends Activity {
  12.     /**
  13.      * 实现可扩展展开列ExpandableListView的三种方式
  14.      * 一是使用SimpleExpandableListAdpater将两个List集合包装成ExpandableListView
  15.      * 二是 扩展BaseExpandableListAdpter
  16.      *  三是使用simpleCursorTreeAdapter将Cursor中的数据包装成SimpleCuroTreeAdapter
  17.      */
  18.     private int[] images = { R.drawable.one, R.drawable.two, R.drawable.threee };
  19.     private String[] names = { “腾讯”, “百度”, “阿里巴巴” };
  20.     private String[][] childnames = { { “QQ”, “微信”, “手机卫士” },
  21.             { “百度地图”, “百度视频”, “PPS&奇艺” }, { “支付宝”, “新郎微博”, “高德地图” } };
  22.     private ExpandableListView ep;
  23.     @Override
  24.     protected void onCreate(Bundle savedInstanceState) {
  25.         super.onCreate(savedInstanceState);
  26.         setContentView(R.layout.activity_main);
  27.         //定义父列表项List数据集合
  28.         List<Map<String, String>> group = new ArrayList<Map<String, String>>();
  29.         //定义子列表项List数据集合
  30.         List<List<Map<String, String>>> ss = new ArrayList<List<Map<String, String>>>();
  31.         for (int i = 0; i < names.length; i++) {
  32.             //提供父列表的数据
  33.             Map<String, String> maps = new HashMap<String, String>();
  34.             // maps.put(“images”, images[i]);
  35.             maps.put(“names”, names[i]);
  36.             group.add(maps);
  37.             //提供当前父列的子列数据
  38.             List<Map<String, String>> child = new ArrayList<Map<String, String>>();
  39.             for (int j = 0; j < names.length; j++) {
  40.                 Map<String, String> mapsj = new HashMap<String, String>();
  41.                 mapsj.put(“tengxun”, childnames[i][j]);
  42.                 child.add(mapsj);
  43.             }
  44.             ss.add(child);
  45.         }
  46.         /**
  47.          * 第一个参数  应用程序接口 this
  48.          * 第二个父列List<?extends Map<String,Object>>集合 为父列提供数据
  49.          * 第三个参数  父列显示的组件资源文件
  50.          * 第四个参数  键值列表 父列Map字典的key
  51.          * 第五个要显示的父列组件id
  52.          * 第六个 子列的显示资源文件
  53.          * 第七个参数 键值列表的子列Map字典的key
  54.          * 第八个要显示子列的组件id
  55.          */
  56.         SimpleExpandableListAdapter expand = new SimpleExpandableListAdapter(
  57.                 this, group, R.layout.images, new String[] { “names” },
  58.                 new int[] { R.id.txt1 }, ss, R.layout.txtitem,
  59.                 new String[] { “tengxun” }, new int[] { R.id.items });
  60.         ep = (ExpandableListView) findViewById(R.id.ep1);
  61.         ep.setAdapter(expand);
  62.     }
  63.     @Override
  64.     public boolean onCreateOptionsMenu(Menu menu) {
  65.         // Inflate the menu; this adds items to the action bar if it is present.
  66.         getMenuInflater().inflate(R.menu.main, menu);
  67.         return true;
  68.     }
  69. }

 

下面附上网上其余几种构造函数的解释

 

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)
构造函数
参数
context        与SimpleExpandableListAdapter关联的ExpandableListView的上下文。
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的上下文。
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数组必须都在该布局文件中找到)
childFrom        定义显示子元素的列名。该列名与childData中的子元素属性(字典键值)对应。
childTo      子View应当显示childFrom参数中的所有列数据。这些数据应当都用TextView来显示。列表中的前N个View从前N个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参数获得列元素的数据。

标签