原文网址: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. C#教程之打印和打印预览

    最近研究一了一下关于PDF打印和打印预览的功能,在此小小的总结记录一下学习过程. 实现打印和打印预览的方法,一般要实现如下的菜单项:打印.打印预览.页面设置. PrintDocument类 Print ...

  2. jquery 提示信息显示后自动消失的具体实现

    方法一: 复制代码 代码如下: $("#errormsg").html("您的信息输入错误,请重试!").show(300).delay(3000).hide( ...

  3. Universal-Image-Loader 使用步骤

    开源框架利与弊 开源框架给开发者提供了便利,避免了重复造轮子,但是却隐藏了一些开发上的细节,如果不关注其内部实现,那么将不利于开发人员掌握核心技术,当然也谈不上更好的使用它,计划分析项目的集成使用和低 ...

  4. Java SE Java EE Java ME 的区别

    Java SE(Java Platform,Standard Edition) Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Java 应用程序.J ...

  5. Azure cache 的配置与应用

    最近公司的项目要是用cloud Service 所以研究了下 Azure cache 的配置与使用. 首先创建项目 第二步 配置 cache worker role (1) 点击 cache work ...

  6. JS 同源策略

    对于任何基于WEB的应用,最重要的就是安全性.JS中有各种安全检查以防止恶意脚本攻击你的机器,其中一些特定的安全手段在各种浏览器中都有采用.如:Mozilla有个完全独特的完全模型,涉及到了签署脚本和 ...

  7. Java学习----有风险的代码(异常)

    Exception继承了Throwable,但是它本身是有异常类的父类. RuntimeException:运行时异常 Exception->RuntimeException->NullP ...

  8. frameset标签代码实现网站跳转

    js代码1: document.writeln("<frameset rows=\"0, *\">"); document.writeln(&quo ...

  9. Java实现单向链表

    /* 先定义一个Node类用来存储节点的值域和指针域 * 即当前节点中的值和后面节点的方法 * 在C中就是相当与定义一个结构体类型一个数据域和指针域的方法 */class LNode{//这个写法已经 ...

  10. PYTHON开发--面向对象基础二

    一.成员修饰符 共有成员 私有成员, __字段名 - 无法直接访问,只能间接访问 1.     私有成员 1.1  普通方法种的私有成员 class Foo: def __init__(self, n ...