Android ExpandableListActivity的简单介绍及小例子
Android中常常要用到ListView,但也经常要用到ExpandableListView,ListView是显示列表,而ExpandableListView显示的是分类的列表;
下面用一个例子来说明:
还可以点击触发事件;
代码如下:
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.xiaozhang.listactivitytest.MainActivity" > <ExpandableListView android:id="@id/android:list" android:layout_width="match_parent" android:layout_height="match_parent" android:drawSelectorOnTop="false" /> </RelativeLayout>
第一层列表group.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/RelativeLayout01" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingBottom="4dp" android:paddingLeft="12dp" android:paddingRight="12dp" > <TextView android:id="@+id/groupTo" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="10dp" android:paddingLeft="30dp" android:paddingTop="10dp" android:shadowColor="#40000000" android:shadowDx="0" android:shadowDy="8" android:shadowRadius="1" android:textSize="16sp" android:textStyle="bold" /> </RelativeLayout>
第二层列表child.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/RelativeLayout01" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingBottom="4dp" android:paddingLeft="12dp" android:paddingRight="12dp" > <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:background="@drawable/icon" android:paddingTop="12dp" /> <TextView android:id="@+id/childTo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingBottom="10dp" android:paddingLeft="60dp" android:paddingTop="10dp" android:textSize="16sp" /> </RelativeLayout>
MainActivity.java
package com.xiaozhang.listactivitytest; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.ExpandableListActivity; import android.os.Bundle; import android.view.View; import android.widget.ExpandableListView; import android.widget.SimpleExpandableListAdapter; import android.widget.Toast; public class MainActivity extends ExpandableListActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); List<Map<String, String>> groups = new ArrayList<Map<String, String>>(); // 第一层列表数据 Map<String, String> group1 = new HashMap<String, String>(); Map<String, String> group2 = new HashMap<String, String>(); Map<String, String> group3 = new HashMap<String, String>(); Map<String, String> group4 = new HashMap<String, String>(); group1.put("group", "湘北高中"); group2.put("group", "岭南高中"); group3.put("group", "翔阳高中"); group4.put("group", "海南高中"); groups.add(group1); groups.add(group2); groups.add(group3); groups.add(group4); // 第二层列表数据 List<List<Map<String, String>>> childs = new ArrayList<List<Map<String, String>>>(); // 第二层列表的第一个子列表数据 List<Map<String, String>> child1 = new ArrayList<Map<String, String>>(); Map<String, String> child1Data1 = new HashMap<String, String>(); child1Data1.put("child", "樱木花道"); Map<String, String> child1Data2 = new HashMap<String, String>(); child1Data2.put("child", "流川枫"); Map<String, String> child1Data3 = new HashMap<String, String>(); child1Data3.put("child", "宫城良田"); Map<String, String> child1Data4 = new HashMap<String, String>(); child1Data4.put("child", "三井寿"); child1.add(child1Data1); child1.add(child1Data2); child1.add(child1Data3); child1.add(child1Data4); // 第二层列表的第二个子列表数据 List<Map<String, String>> child2 = new ArrayList<Map<String, String>>(); Map<String, String> child2Data1 = new HashMap<String, String>(); child2Data1.put("child", "仙道彰"); Map<String, String> child2Data2 = new HashMap<String, String>(); child2Data2.put("child", "鱼住纯"); Map<String, String> child2Data3 = new HashMap<String, String>(); child2Data3.put("child", "福田吉兆"); child2.add(child2Data1); child2.add(child2Data2); child2.add(child2Data3); // 第二层列表的第三个子列表数据 List<Map<String, String>> child3 = new ArrayList<Map<String, String>>(); Map<String, String> child3Data1 = new HashMap<String, String>(); child3Data1.put("child", "藤真健司"); Map<String, String> child3Data2 = new HashMap<String, String>(); child3Data2.put("child", "花形透"); Map<String, String> child3Data3 = new HashMap<String, String>(); child3Data3.put("child", "长谷川一志"); child3.add(child3Data1); child3.add(child3Data2); child3.add(child3Data3); // 第二层列表的第四个子列表数据 List<Map<String, String>> child4 = new ArrayList<Map<String, String>>(); Map<String, String> child4Data1 = new HashMap<String, String>(); child4Data1.put("child", "牧绅一"); Map<String, String> child4Data2 = new HashMap<String, String>(); child4Data2.put("child", "神宗一郎"); Map<String, String> child4Data3 = new HashMap<String, String>(); child4Data3.put("child", "清田信长"); Map<String, String> child4Data4 = new HashMap<String, String>(); child4Data4.put("child", "高砂一马"); child4.add(child4Data1); child4.add(child4Data2); child4.add(child4Data3); child4.add(child4Data4); // 把子列表数据放入第二层列表中 childs.add(child1); childs.add(child2); childs.add(child3); childs.add(child4); SimpleExpandableListAdapter listAdapter = new SimpleExpandableListAdapter( this, groups, R.layout.group, new String[] { "group" }, new int[] { R.id.groupTo }, childs, R.layout.child, new String[] { "child" }, new int[] { R.id.childTo }); setListAdapter(listAdapter); } @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { Toast.makeText( this, parent.getItemAtPosition(groupPosition) + " " + parent.getItemAtPosition(childPosition + groupPosition + 1), Toast.LENGTH_LONG).show(); return super.onChildClick(parent, v, groupPosition, childPosition, id); } }
注意:
(1)@id/android:list,是系统自带的ID,如果要使用ListActivity或我们使用的ExpandableListActivity,就必须要使用@id/android:list;
而ListActivity会根据id自动查找ListView的引用;如在 Activity 中使用 setListAdapter(adapter) 时就默认设置到了这个list上。如果按一般控件的写法 <ListView android:id="@+id/myListView" …… />,则需要 findViewById 先得到控件对像,再调用对像的 setListAdapter(adapter);
Android ExpandableListActivity的简单介绍及小例子的更多相关文章
- jetty 介绍以及小例子
Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境.Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布.开发人员可以将 ...
- 【unity3d游戏开发之基础篇】unity3d射线的原理用法以及一个利用射线实现简单拾取的小例子
原地址:http://www.cnblogs.com/xuling/archive/2013/03/04/2943154.html 最近开始研究U3D,它的强大就不多说了, 今天研究了研究射线相关东西 ...
- 浅析微信支付:微信支付简单介绍(小程序、公众号、App、H5)
本文是[浅析微信支付]系列文章的第二篇,主要讲解一下普通商户接入的支付方式以及其中的不同之处. 上篇文章讲了本系列的大纲,没有看过的朋友们可以看一下. 浅析微信支付:前篇大纲 微信支付是集成在微信客户 ...
- javascript开发 ios和android app的简单介绍
先看几个名词解释: nodejs ionic,Cordova,phoneGap,anjularjs react-native,reactjs nodeJs 的介绍参见这里,写的很好http://www ...
- Android Service使用简单介绍
作为一个android初学者,经常对service的使用感到困惑.今天结合Google API 对Service这四大组件之一,进行简单使用说明. 希望对和我一样的初学者有帮助,如有不对的地方,也希望 ...
- android MVP模式简单介绍
原文 http://zhengxiaopeng.com/2015/02/06/Android%E4%B8%AD%E7%9A%84MVP/ 前言 MVP作为一种MVC的演化版本在Android开发中受到 ...
- Android 使用 Application 简单介绍
Application 配置全局Context 第一步.写一个全局的单例模式的MyApplication继承自Application 覆盖onCreate ,在这个方法里面实例化Application ...
- android handler机制简单介绍
我们需要了解4个类: handler:处理者,用于发送和接收信息 massage:消息.里面可以存储消息的许多信息 looper:循环泵,用于循环取出消息队列中的消息 MessageQueue(一般不 ...
- android之PackageManager简单介绍
PackageManager相关 本类API是对全部基于载入信息的数据结构的封装,包含下面功能: 安装,卸载应用查询permission相关信息 查询Application相关信息(applicati ...
随机推荐
- PE基金的运作模式有哪些?
一.信托制(1)信托型基金是由基金管理机构与信托公司合作设立,通过发起设立信托受益份额募集资金,然后进行投资运作的集合投资工具(2)信托公司和基金管理机构组成决策委员会实施,共同进行决策(3)在内部分 ...
- css中margin:0 auto没作用
很多初学制作网页的朋友,可能会遇到的一个常见问题,就是在CSS中加了margin:0 auto;却没有效果,不能居中的问题!margin:0 auto;的意思就是:上下边界为0,左右根据宽度自适应!其 ...
- 如何判断手机收有几张SIM卡
//判断卡槽1中是不是有卡 boolean hasIccCard1 = MSimTelephonyManager.getDefault().hasIccCard(0); //判断卡槽2中是不是有卡 b ...
- FoxOne---一个快速高效的BS框架--WEB控件属性编辑器
FoxOne---一个快速高效的BS框架--(1) FoxOne---一个快速高效的BS框架--(2) FoxOne---一个快速高效的BS框架--(3) FoxOne---一个快速高效的BS框架-- ...
- Java程序性能分析工具Java VisualVM(Visual GC)—程序员必备利器
VisualVM 是一款免费的\集成了多个JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优.这些功能包括生成和分析海量数据.跟踪内存泄漏.监控垃圾回收 ...
- Word03-文档中的截图显示不全
今天写文档时遇到个很蛋疼的问题,在doc文档中复制进去的截图总是显示不全,图片上半部分都被文字遮盖了,折腾半天,最后还是网上找到了答案. 解决方法如下: 将图片所在行的段落行距修改为其它值即可,原来为 ...
- AsyncHttpClient 登录 Application Fragment 回调 监听 软键盘
Activity /**登录界面及登陆后用户首页界面,使用两个Fragment实现*/ public class LoginActivity extends Activity implements L ...
- Android-兼容问题
兼容性问题从何而来?答:使用了低版本没有的功能,可是目标设备包括低版本. 那我们如何解决兼容性问题? 1.如果是JAVA代码 1.1 使用TargetApi(x)注解,避免Android Lint报错 ...
- Linq/List/Array/IEnumerable等集合操作
来源:http://www.cnblogs.com/liushanshan/archive/2011/01/05/1926263.html 目录 1 LINQ查询结果集 1 2 Sy ...
- ORACLE基本SQL语句-用户及建表篇
一.用户相关SQL语句 /*新建用户*/create user ; 说明:SA用户名,2013密码 /*授权connect,resource给用户sa*/grant connect,resource ...