android-基础编程-ExpandableListview
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的更多相关文章
- android: 多线程编程基础
9.1 服务是什么 服务(Service)是 Android 中实现程序后台运行的解决方案,它非常适合用于去执行那 些不需要和用户交互而且还要求长期运行的任务.服务的运行不依赖于任何用户界面,即使 ...
- Android网络编程基础
Android网络编程只TCP通信 TCP 服务器端工作的主要步骤如下.步骤1 调用ServerSocket(int port)创建一个ServerSocket,并绑定到指定端口上.步骤2 调用acc ...
- Qt on Android 核心编程
Qt on Android 核心编程(最好看的Qt编程书!CSDN博主foruok倾力奉献!) 安晓辉 著 ISBN 978-7-121-24457-5 2015年1月出版 定价:65.00元 4 ...
- Android网络编程系列 一 TCP/IP协议族
在学习和使用Android网路编程时,我们接触的仅仅是上层协议和接口如Apache的httpclient或者Android自带的httpURlconnection等等.对于这些接口的底层实现我们也有必 ...
- Android网络编程系列 一 Socket抽象层
在<Android网络编程>系列文章中,前面已经将Java的通信底层大致的描述了,在我们了解了TCP/IP通信族架构及其原理,接下来我们就开始来了解基于tcp/ip协议层的Socket抽 ...
- Android基础总结(8)——服务
服务(Service)是Android中实现程序后台运行的解决方案,它非常适合用于去执行哪些不需要和用户交互而且还要长期运行的任务.服务的运行不依赖任何用户界面,即使当程序被切换到后台,或者用户打开了 ...
- 【Xamarin开发 Android 系列 4】 Android 基础知识
原文:[Xamarin开发 Android 系列 4] Android 基础知识 什么是Android? Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Li ...
- 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介
Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...
- 【Android 应用开发】Android 网络编程 API笔记 - java.net 包相关 接口 api
Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; -- Java包 : java.net 包 (6接口, 34类, 2枚举, 12异常); -- An ...
- Android并发编程 多线程与锁
该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,如果能给各位看官带来一丝启发或者帮助,那真是极好的. 前言 前一篇Android并发编程开篇呢,主要是简单介绍一下线程以及 ...
随机推荐
- thinkphp5 与 endroid 二维码生成
windows compser安装endroid/qrcode,自己安装好composer工具; 1. 项目目录 文件 composer.json require 里添加 "endroid/ ...
- web应用 与 http协议
一.web 应用 Web应用程序是一种可以通过Web访问的应用程序,用户只需要有浏览器即可访问应用程序,不需要再安装其他软件. 应用程序有两种模式C/S.B/S.C/S即客户端—服务端程序这类程序一般 ...
- 3.1链表----链表(Linked List)入门
在分析链表之前,我们先来对之前的动态数组.栈.队列总结一下: (1)底层依托于静态数组 (2)依靠resize解决固定容量问题 (3)是一种假的的动态数据结构 1.什么是链表 可以从以下两个部分来理解 ...
- orcal安装
1.下载安装包(版本32位或64位)下载网址:https://www.oracle.com,建议关闭防火墙(可以的话关闭网) 2.将两个安装包解压为一个安装包 3.点击执行 3. 4. 5. 5. 6 ...
- java的反射机制之getDeclaredMethods和getMethods的区别
getMethods() 返回一个包含某些 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 me ...
- Rocket MQ 1 - 用
参考 http://www.iocoder.cn/categories/RocketMQ/ ; https://www.jianshu.com/nb/16219849 首先上启动方法,分别启动name ...
- php 处理上百万条的数据库如何提高处理查询速度
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- ajax-json,遇到的一个问题,jquery var ,加载顺序。JS对象,json格式转换。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- intellij idea 配置gitlab ssh key
1 安装git,登录官网https://www.git-scm.com/download/ ,选择相应系统版本,下载后安装好. 公司网慢的可以用第三方的软件管家下载. 2 打开git bash,不需要 ...
- c++ 面试题(海量数据篇)
1,在海量数据中找中位数: 题目如下: 只有2G内存的pc机,在一个存有10G个整数的文件,从中找到中位数,写一个算法. 解答:http://www.cnblogs.com/youxin/archiv ...