ExpandableListView继承ListView,具有LIstVIew的基本功能。此外具有group/child,由组与子元素组成。

1.布局主要有是三个。

a.主布局:

<ExpandableListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/expandlistview"
android:dividerHeight="5dp"
android:background="#ffffff"
android:divider="@drawable/expandchilddivide"
android:childDivider="#000000"
/>

b.Group布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:id="@+id/group_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="10dip"
android:paddingBottom="10dip"
android:gravity="center_horizontal"
android:text="122"
/> </LinearLayout>

c.Child布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<TextView
android:id="@+id/textOne"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="1"
/>
<TextView
android:id="@+id/textTwo"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="2"
/>
<TextView
android:id="@+id/textThree"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="3"
/>
</LinearLayout>
</LinearLayout>

2.代码生成 类似adapter 创建adapter(ExpandableListAdapter、BaseExpandableListAdapter、SimpleExpandableListAdapter 依次继承关系)

a.创建adapter

//自定义适配器
class Adapter extends BaseExpandableListAdapter {
//获取子元素对象
@Override
public Object getChild(int groupPosition, int childPosition) {
return null;
} //获取子元素Id
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
} //加载子元素并显示
@Override
public View getChildView(final int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
View view = null;
ChildHolder childholder = null;
if (convertView != null) {
view = convertView;
childholder = (ChildHolder) view.getTag();
} else {
view = View.inflate(ExpandableListViewActi.this, R.layout.expand_child, null);
childholder = new ChildHolder();
//childholder.mImage = (ImageView) view.findViewById(R.id.image);
childholder.mPrice = (TextView) view.findViewById(R.id.textTwo);
childholder.mStateText = (TextView) view.findViewById(R.id.textOne);
childholder.mSecondPrice = (TextView) view.findViewById(R.id.textThree);
view.setTag(childholder);
}
// childholder.mImage.setOnClickListener(new OnClickListener() {
// @Override
// public void onClick(View v) {
// Toast.makeText(MainActivity.this, "第"+groupPosition+"组的第"+childPosition+"圖標被点击了", 0).show();
// }
// });
childholder.mPrice.setText(child_list.get(groupPosition));
int len = group_list.size();
System.out.println(len + "-----------------");
childholder.mStateText.setText(child_list.get(groupPosition));
childholder.mSecondPrice.setText(child_list.get(groupPosition));
return view;
} //获取子元素数目
@Override
public int getChildrenCount(int groupPosition) {
return child_list.size();
} //获取组元素对象
@Override
public Object getGroup(int groupPosition) {
return group_list.get(groupPosition);
} //获取组元素数目
@Override
public int getGroupCount() {
return group_list.size();
} //获取组元素Id
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
} //加载并显示组元素
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
View view = null;
GroupHolder groupholder = null;
if (convertView != null) {
view = convertView;
groupholder = (GroupHolder) view.getTag();
} else {
view = View.inflate(ExpandableListViewActi.this, R.layout.expand_group, null);
groupholder = new GroupHolder();
groupholder.mSpaceText = (TextView) view.findViewById(R.id.group_text);
view.setTag(groupholder);
}
groupholder.mSpaceText.setText(group_list.get(groupPosition));
return view;
} @Override
public boolean hasStableIds() { return true;
} @Override
public boolean isChildSelectable(int groupPosition, int childPosition) { return true;
} }

b.生成主界面代码,设置adapter .expandable四中点击相应事件。

private void initView() {
mListView = (ExpandableListView) findViewById(R.id.expandlistview);
mInflater = LayoutInflater.from(ExpandableListViewActi.this);
group_list = new ArrayList<String>();
for (int i = 0; i < 5; i++) {
group_list.add("zcx");
child_list.add("child");
}
Adapter adapter = new Adapter();
//mListView.setGroupIndicator(null); /**
* ExpandableListView的组监听事件
*/
// mListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
//
// @Override
// public boolean onGroupClick(ExpandableListView parent, View v,
// int groupPosition, long id) {
// Toast.makeText(ExpandableListViewActi.this, "第" + groupPosition + "组被点击了", 0).show();
// return true;
// }
// });
/**
* ExpandableListView的组展开监听
*/
mListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() { @Override
public void onGroupExpand(int groupPosition) {
Toast.makeText(ExpandableListViewActi.this, "第" + groupPosition + "组展开", 0).show();
}
});
/**
* ExpandableListView的组合拢监听
*/
mListView.setOnGroupCollapseListener(new ExpandableListView.OnGroupCollapseListener() { @Override
public void onGroupCollapse(int groupPosition) {
Toast.makeText(ExpandableListViewActi.this, "第" + groupPosition + "组合拢", 0).show();
}
});
/**
* ExpandableListView的子元素点击监听
*/
mListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { @Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
Toast.makeText(ExpandableListViewActi.this, "第" + groupPosition + "组的第" + childPosition + "被点击了", 0).show();
return true;
}
}); mListView.setAdapter(adapter);
// int groupCount = mListView.getCount();
// for(int i=0;i<groupCount;i++){
// mListView.expandGroup(i);
// }
}

3.效果图

android-基础编程-ExpandableListview的更多相关文章

  1. android: 多线程编程基础

    9.1   服务是什么 服务(Service)是 Android 中实现程序后台运行的解决方案,它非常适合用于去执行那 些不需要和用户交互而且还要求长期运行的任务.服务的运行不依赖于任何用户界面,即使 ...

  2. Android网络编程基础

    Android网络编程只TCP通信 TCP 服务器端工作的主要步骤如下.步骤1 调用ServerSocket(int port)创建一个ServerSocket,并绑定到指定端口上.步骤2 调用acc ...

  3. Qt on Android 核心编程

    Qt on Android 核心编程(最好看的Qt编程书!CSDN博主foruok倾力奉献!) 安晓辉 著   ISBN 978-7-121-24457-5 2015年1月出版 定价:65.00元 4 ...

  4. Android网络编程系列 一 TCP/IP协议族

    在学习和使用Android网路编程时,我们接触的仅仅是上层协议和接口如Apache的httpclient或者Android自带的httpURlconnection等等.对于这些接口的底层实现我们也有必 ...

  5. Android网络编程系列 一 Socket抽象层

     在<Android网络编程>系列文章中,前面已经将Java的通信底层大致的描述了,在我们了解了TCP/IP通信族架构及其原理,接下来我们就开始来了解基于tcp/ip协议层的Socket抽 ...

  6. Android基础总结(8)——服务

    服务(Service)是Android中实现程序后台运行的解决方案,它非常适合用于去执行哪些不需要和用户交互而且还要长期运行的任务.服务的运行不依赖任何用户界面,即使当程序被切换到后台,或者用户打开了 ...

  7. 【Xamarin开发 Android 系列 4】 Android 基础知识

    原文:[Xamarin开发 Android 系列 4] Android 基础知识 什么是Android? Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Li ...

  8. 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介

    Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...

  9. 【Android 应用开发】Android 网络编程 API笔记 - java.net 包相关 接口 api

    Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...

  10. Android并发编程 多线程与锁

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,如果能给各位看官带来一丝启发或者帮助,那真是极好的. 前言 前一篇Android并发编程开篇呢,主要是简单介绍一下线程以及 ...

随机推荐

  1. sqlserver数据库镜像运行模式

    运行模式: 从大层面来说,SQL Server镜像只有两种模式:高安全模式和高性能模式.两种模式的主要区别在于在事务提交后的操作.可以从图1-1中查看运行模式. 在高性能模式下,主体服务器不需要等待镜 ...

  2. windows:plsql配置oracle连接

    1.plsql安装 此处省略,后续添加 2.plsql连接oracle: (1) 下载Instant client:http://www.oracle.com/technetwork/cn/topic ...

  3. 实战ELK(7)ElasticSearch常用的基本查询语句

    1.term 过滤 term主要用于精确匹配哪些值,比如数字,日期,布尔值或 not_analyzed 的字符串(未经切词的文本数据类型): { "term": { "d ...

  4. C#中EXCEL表格的内容进度条实现

    public void ExportToExcel() { DataTable dt = getDataTable(); if (dt == null) { MessageBox.Show(" ...

  5. 《Effective Java 第三版》新条目介绍

    版权声明:本文为博主原创文章,可以随意转载,不过请加上原文链接. https://blog.csdn.net/u014717036/article/details/80588806前言 从去年的3月份 ...

  6. VULKAN学习资料

    1,中文开发教程:https://www.cnblogs.com/heitao/p/7193853.html

  7. mysql创建表和数据库

    创建数据库,创建数据库表,例子.MySQL语句   1.创建数据库:    创建的代码:create  数据库的代码:database   数据库表名:随便起,只要自己记住就行.test create ...

  8. java.lang.String (JDK1.8)

    String类实现了java.io.Serializable, Comparable<String>, CharSequence这三个interface. 看了下这三个interface中 ...

  9. bazel build //tensorflow/examples/android:tensorflow_demo报错: fatal error: 'cuda_runtime.h' file not found

    In file included from ./third_party/eigen3/unsupported/Eigen/CXX11/Tensor:1:external/eigen_archive/u ...

  10. 《CSAPP》 可重定位目标文件格式

    可重定位目标文件 ELF文件 ELF头以一个16字节的序列开始,这个序列描述了生成该文件的系统的字的大小和字节顺序.ELF头剩下的部分包含帮助链接器语法分析和解释目标文件的信息.其中包括ELF头的大小 ...