原文网址:http://blog.csdn.net/x605940745/article/details/12099709

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

    欢迎加入QQ交流3群:317874559

一是使用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

  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>
  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>
  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参数获得列元素的数据。

【转】实现展开列ExpandableListView的三种方式之SimpleExpandableListAdapter实例的更多相关文章

  1. form表单提交三种方式,demo实例详解

    第一种:使用type=submit  可以直接提交 <html> <head> <title>submit直接提交</title> </head& ...

  2. 监视EntityFramework中的sql流转你需要知道的三种方式Log,SqlServerProfile, EFProfile

    大家在学习entityframework的时候,都知道那linq写的叫一个爽,再也不用区分不同RDMS的sql版本差异了,但是呢,高效率带来了差灵活性,我们 无法控制sql的生成策略,所以必须不要让自 ...

  3. iOS字体加载三种方式

    静态加载 动态加载 动态下载苹果提供的多种字体 其他 打印出当前所有可用的字体 检查某字体是否已经下载 这是一篇很简短的文章,介绍了 iOS 自定义字体加载的三种方式. 静态加载 这个可以说是最简单最 ...

  4. 0036 Java学习笔记-多线程-创建线程的三种方式

    创建线程 创建线程的三种方式: 继承java.lang.Thread 实现java.lang.Runnable接口 实现java.util.concurrent.Callable接口 所有的线程对象都 ...

  5. 【整理】Linux下中文检索引擎coreseek4安装,以及PHP使用sphinx的三种方式(sphinxapi,sphinx的php扩展,SphinxSe作为mysql存储引擎)

          一,软件准备 coreseek4.1 (包含coreseek测试版和mmseg最新版本,以及测试数据包[内置中文分词与搜索.单字切分.mysql数据源.python数据源.RT实时索引等测 ...

  6. JDBC的批处理操作三种方式 pstmt.addBatch()

    package lavasoft.jdbctest; import lavasoft.common.DBToolkit; import java.sql.Connection; import java ...

  7. 【Java EE 学习 52】【Spring学习第四天】【Spring与JDBC】【JdbcTemplate创建的三种方式】【Spring事务管理】【事务中使用dbutils则回滚失败!!!??】

    一.JDBC编程特点 静态代码+动态变量=JDBC编程. 静态代码:比如所有的数据库连接池 都实现了DataSource接口,都实现了Connection接口. 动态变量:用户名.密码.连接的数据库. ...

  8. Java设置session超时(失效)的三种方式

    1. 在web容器中设置(此处以tomcat为例) 在tomcat-6.0\conf\web.xml中设置,以下是tomcat 6.0中的默认配置: <!-- ================= ...

  9. angularjs 自定义服务的三种方式

    angularjs 中可通过三种($provider,$factory,$service)方式自定义服务,以下是不同的实现形式: // 定义module , module中注入$providevar ...

随机推荐

  1. 8个开发必备的PHP功能(转)

    又是好几天没写博客,今天看到了个不错的文章,就转载到自己的博客,好以后查询方便. 1.传递任意数量的函数参数 我们在.NET或者JAVA编程中,一般函数参数个数都是固定的,但是PHP允许你使用任意个数 ...

  2. java命名规则

    java变量命名是不能以#开头的.Java变量的命名规则如下:$ .字母.下划线开头都行,不能以数字开头 后面的可以是数字.字母.下划线, 其他的命名方式,都会报错,且不能运行. 以字母.下划线( _ ...

  3. 【STL】string 常用函数

    string类的构造函数: string(const char *s); //用c字符串s初始化 string(int n,char c); //用n个字符c初始化 此外,string类还支持默认构造 ...

  4. 查看oracle 启动了多久

    想看一下系统正常运行了多少天?开机多长时间没有重启了? windows系统 C:\>systeminfo |find “系统启动时间”系统启动时间:     265 天 4 小时 26 分 32 ...

  5. mac下安装配置nginx环境

    本文介绍 nginx 在mac上的安装. 我是通过brewhome 来安装的. brew install nginx 一路顺畅. 下面是安装信息. 复制代码 代码如下: hematoMacBook-P ...

  6. MVC5学习笔记

    买了一本MVC5的书:ASP.NET MVC 5 高级编程(第5版).边学边记录一下 1.快速创建模型类,如:自动实现的属性 {get;set;} 输入“prop",按Tab两次,默认属性值 ...

  7. java加密类型和算法名称

    项目里有各种加密方法,但从来没有仔细研究过.一般只是copy.这几天遇到一些问题,看了一下加密代码,觉得有些疑惑. 我们知道jdk已经为我们包装好了很多的算法.但究竟包装了哪些算法,怎么去掉这些算法我 ...

  8. POJ 2039 To and Fro(模拟)

    To and Fro Description Mo and Larry have devised a way of encrypting messages. They first decide sec ...

  9. 实习之vim基本学习

    最近实习学到了写vim的基本用法,记录一下 批量注释 ctrl+v进入列模式,按“I”进入插入模式,按// #等在每行开头插入注释,esc 批量去除注释 ctrl + v 进入列模式,按“x”即可. ...

  10. C++ 虚函数与纯虚函数

    #include<iostream> #include<string> using namespace std; class A{ public: virtual void f ...