ExpandableListView(可扩展的ListView)

ExpandableListVivew是ListView的子类,它在普通ListView的基础上进行了扩展,它把应用中的列表项分为几组,每组里 又可包含多个列表项。ExpandableListVivew的用法与普通ListView的用法非常相似,只是ExpandableListVivew 显示的列表项应该由ExpandableAdapter提供。

实现ExpandableAdapter的三种方式 

一是扩展BaseExpandableListAdpter实现ExpandableAdapter。

二是使用SimpleExpandableListAdpater将两个List集合包装成ExpandableAdapter

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

下图为ExpandableListVivew支持的xml属性

XML Attributes

属性名

Related Method

描述

android:childDivider

指定各组内子类表项之间的分隔条 ①

android:childIndicator

显示在子列表旁边的Drawable对象②

android:childIndicatorLeft

子列表项指示符的左边约束位置③

android:childIndicatorRight

子列表项指示符的右边约束位置④

android:groupIndicator

显示在组列表旁边的Drawable对象⑤

android:indicatorLeft

组列表项指示器的左边约束位置⑥

android:indicatorRight

组列表项指示器的右边约束位置 ⑦

备注:

①   注:图片不会完全显示,分离子列表项的是一条直线

②   注:可以是一个图片

③ 注:即从左端0位置开始计数,比如,假设指示符是一个图标,给定这个属性值为

3dip,则表示从左端起3dip开始显示此图标。

④   注:表示右端到什么位置结束

⑤   注:可以是一个图片。

⑥   注:表示左端从什么位置开始。

⑦ 注:表示右端到什么位置结束。

       一般适用于ExpandableListView的Adapter都要继承BaseExpandableListAdapter这个类,并且必须重载getGroupView和getChildView这两个最为重要的方法。

      当扩展BaseExpandableListAdapter时,关键是实现如下四个方法:

public abstract ViewgetChildView (int groupPosition, intchildPosition, boolean isLastChild, ViewconvertView, ViewGroup parent)

取得显示给定分组给定子位置的数据用的视图.

参数

groupPosition 包含要取得子视图的分组位置.

childPosition   分组中子视图(要返回的视图)的位置.

isLastChild     该视图是否为组中的最后一个视图.

convertView   如果可能,重用旧的视图对象.使用前你应该保证视图对象为非空,并且是否是合适的类型.如果该对象不能转换为可以正确显示数据的视图,该方法就创建新视图.不保证使用先前由getChildView(int, int,boolean, View, ViewGroup)创建的视图.

parent     该视图最终从属的父视图.

返回

指定位置相应的子视图.

public abstract intgetChildrenCount (int groupPosition)

取得指定分组的子元素数.

参数

groupPosition 要取得子元素个数的分组位置.

返回

指定分组的子元素个数.

public abstract ViewgetGroupView (int groupPosition, booleanisExpanded, View convertView, ViewGroupparent)

取得用于显示给定分组的视图.这个方法仅返回分组的视图对象,要想获取子元素的视图对象,就需要调用getChildView(int, int, boolean, View, ViewGroup).

参数

groupPosition 决定返回哪个视图的组位置.

isExpanded     该组是展开状态还是收起状态 .

convertView   如果可能,重用旧的视图对象.使用前你应该保证视图对象为非空,并且是否是合适的类型.如果该对象不能转换为可以正确显示数据的视图,该方法就创建新视图.不保证使用先前由getGroupView(int, boolean,View, ViewGroup)创建的视图.

parent     该视图最终从属的父视图.

返回

指定位置相应的组视图.

public abstract intgetGroupCount ()

取得分组数.

返回

分组数.

BaseExpandableListAdapter的重载的其它方法如下:

public abstract Object getChild(int groupPosition, int childPosition)

取得与指定分组、指定子项目关联的数据.

参数

groupPosition 包含子视图的分组的位置.

childPosition   指定的分组中的子视图的位置.

返回

与子视图关联的数据.

public abstract long getChildId(int groupPosition, intchildPosition)

取得给定分组中给定子视图的ID.该组ID必须在组中是唯一的.必须不同于其他所有ID(分组及子项目的ID).

参数

groupPosition 包含子视图的分组的位置.

childPosition   要取得ID的指定的分组中的子视图的位置.

返回

与子视图关联的ID.

public abstract longgetCombinedChildId (long groupId, long childId)

取得一览中可以唯一识别子条目的ID(包括分组ID和子条目ID).可扩展列表要求每个条目(分组条目和子条目)具有一个可以唯一识别列表中子条目和分组条目的ID.该方法根据给定子条目ID和分组条目ID返回唯一识别ID.另外,如果hasStableIds()为真,该函数返回的ID必须是固定不变的.

参数

groupId   包含子条目ID的分组条目ID.

childId    子条目的ID.

返回

可以在所有分组条目和子条目中唯一识别该子条目的ID(可能是固定不变的).

public abstract longgetCombinedGroupId (long groupId)

取得一览中可以唯一识别子条目的ID(包括分组ID和子条目ID).可扩展列表要求每个条目(分组条目和子条目)具有一个可以唯一识别列表中子条目和分组条目的ID.该方法根据给定子条目ID和分组条目ID返回唯一识别ID.另外,如果hasStableIds()为真,该函数返回的ID必须是固定不变的.

参数

groupId   分组条目ID.

返回

可以在所有分组条目和子条目中唯一识别该分组条目的ID(可能是固定不变的).

public abstract Object getGroup(int groupPosition)

取得与给定分组关联的数据.

参数

groupPosition 分组的位置.

返回

指定分组的数据.

public abstract long getGroupId(int groupPosition)

取得指定分组的ID.该组ID必须在组中是唯一的.必须不同于其他所有ID(分组及子项目的ID).

参数

groupPosition 要取得ID的分组位置.

返回

与分组关联的ID.

public abstract booleanhasStableIds ()

是否指定分组视图及其子视图的ID对应的后台数据改变也会保持该ID.

返回

是否相同的ID总是指向同一个对象.

public abstract booleanisChildSelectable (int groupPosition, intchildPosition)

指定位置的子视图是否可选择.

参数

groupPosition 包含要取得子视图的分组位置.

childPosition   分组中子视图的位置.

返回

是否子视图可选择.

注意:

在XML布局文件中,如果ExpandableListView上一级视图的大小没有严格定义的话,则不能对ExpandableListView的android:layout_height属性使用wrap_content值。(例如,如果上一级视图是ScrollView的话,则不应该指定wrap_content的值,因为它可以是任意的长度。不过,如果ExpandableListView的上一级视图有特定的大小的话,比如100像素,则可以使用wrap_content)

Android ExpandableListView的使用详解的更多相关文章

  1. 《Android NFC 开发实战详解 》简介+源码+样章+勘误ING

    <Android NFC 开发实战详解>简介+源码+样章+勘误ING SkySeraph Mar. 14th  2014 Email:skyseraph00@163.com 更多精彩请直接 ...

  2. Android开发之InstanceState详解

    Android开发之InstanceState详解   本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...

  3. ANDROID L——Material Design详解(UI控件)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: Google已经确认Android L就是Android Lolli ...

  4. android bundle存放数据详解

    转载自:android bundle存放数据详解 正如大家所知道,Activity之间传递数据,是将数据存放在Intent或者Bundle中 例如: 将数据存放倒Intent中传递: 将数据放到Bun ...

  5. Cordova 打包 Android release app 过程详解

    Cordova 打包 Android release app 过程详解 时间 -- :: SegmentFault 原文 https://segmentfault.com/a/119000000517 ...

  6. Android中Service(服务)详解

    http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...

  7. 给 Android 开发者的 RxJava 详解

    我从去年开始使用 RxJava ,到现在一年多了.今年加入了 Flipboard 后,看到 Flipboard 的 Android 项目也在使用 RxJava ,并且使用的场景越来越多 .而最近这几个 ...

  8. Android中mesure过程详解

    我们在编写layout的xml文件时会碰到layout_width和layout_height两个属性,对于这两个属性我们有三种选择:赋值成具体的数值,match_parent或者wrap_conte ...

  9. Android中Intent组件详解

    Intent是不同组件之间相互通讯的纽带,封装了不同组件之间通讯的条件.Intent本身是定义为一个类别(Class),一个Intent对象表达一个目的(Goal)或期望(Expectation),叙 ...

随机推荐

  1. Quartz原理解密

    Quartz原理解密 Author: Dorae Date:2018年7月17日15:55:02 转载请注明出处 一.quartz概述 quartz是一个用java实现的开源任务调度框架,可以用来创建 ...

  2. 源码分析-react3-创建dom

    React.createElement class Welcome extends React.Component { constructor(){ super() this.state={ test ...

  3. 【分享】迅为iTOP4412开发板-Android系统屏幕旋转设置

    1.1概述 Android4.0,Androd4.4源代码能够编译成手机模式和平板模式,讯为iTop4412 开发平台 的Android系统默认编译为平板模式.客户须要依据自己的产品设计及应用环境,切 ...

  4. js 实现对ajax请求面向对象的封装

             AJAX 是一种用于创建高速动态网页的技术.通过在后台与server进行少量数据交换.AJAX 能够使网页实现异步更新.这意味着能够在不又一次载入整个网页的情况下,对网页的某部分进行 ...

  5. 数据结构之中序遍历转兴许遍历(JAVA实现)(二)

    算法流程: 主要分为四步: 1.当前字符为数字或者字母,则直接输出 2.当前字符为).则在栈中匹配输出.一直匹配到),则停止输出(就是将)及其顶上的元素所有弹出来输出) 3.当前字符为操作符.则比較当 ...

  6. go语言笔记——defer作用DB资源等free或实现调试

    defer 和追踪 关键字 defer 允许我们推迟到函数返回之前(或任意位置执行 return 语句之后)一刻才执行某个语句或函数(为什么要在返回之后才执行这些语句?因为 return 语句同样可以 ...

  7. linux下的so、o、lo、a、la文件的区别

    o: 编译的目标文件a: 静态库,其实就是把若干o文件打了个包so: 动态链接库(共享库) lo: 使用libtool编译出的目标文件,其实就是在o文件中添加了一些信息la: 使用libtool编译出 ...

  8. setings.py配置文件详解

    BASE_DIR指的是项目的根目录.SECRET_KEY是安全码. # SECURITY WARNING: don't run with debug turned on in production! ...

  9. WP处理事件

    (1).Launching事件 Launching(进入)事件是每一个第三方应用在第一次运行时都必须执行的事件,它主要负责应用程序的初始化.这个事件与Closing事件是对应的,一个运行正常的应用程序 ...

  10. C# Pen绘制虚线(System.Drawing.Pen与System.Windows.Media.Pen)

    一.绘制虚线的方法 GDI绘制,使用的是System.Drawing.Pen Pen pen = new Pen(Color.Red, 1);            pen.DashStyle = S ...