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的简单介绍及小例子的更多相关文章

  1. jetty 介绍以及小例子

    Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境.Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布.开发人员可以将 ...

  2. 【unity3d游戏开发之基础篇】unity3d射线的原理用法以及一个利用射线实现简单拾取的小例子

    原地址:http://www.cnblogs.com/xuling/archive/2013/03/04/2943154.html 最近开始研究U3D,它的强大就不多说了, 今天研究了研究射线相关东西 ...

  3. 浅析微信支付:微信支付简单介绍(小程序、公众号、App、H5)

    本文是[浅析微信支付]系列文章的第二篇,主要讲解一下普通商户接入的支付方式以及其中的不同之处. 上篇文章讲了本系列的大纲,没有看过的朋友们可以看一下. 浅析微信支付:前篇大纲 微信支付是集成在微信客户 ...

  4. javascript开发 ios和android app的简单介绍

    先看几个名词解释: nodejs ionic,Cordova,phoneGap,anjularjs react-native,reactjs nodeJs 的介绍参见这里,写的很好http://www ...

  5. Android Service使用简单介绍

    作为一个android初学者,经常对service的使用感到困惑.今天结合Google API 对Service这四大组件之一,进行简单使用说明. 希望对和我一样的初学者有帮助,如有不对的地方,也希望 ...

  6. android MVP模式简单介绍

    原文 http://zhengxiaopeng.com/2015/02/06/Android%E4%B8%AD%E7%9A%84MVP/ 前言 MVP作为一种MVC的演化版本在Android开发中受到 ...

  7. Android 使用 Application 简单介绍

    Application 配置全局Context 第一步.写一个全局的单例模式的MyApplication继承自Application 覆盖onCreate ,在这个方法里面实例化Application ...

  8. android handler机制简单介绍

    我们需要了解4个类: handler:处理者,用于发送和接收信息 massage:消息.里面可以存储消息的许多信息 looper:循环泵,用于循环取出消息队列中的消息 MessageQueue(一般不 ...

  9. android之PackageManager简单介绍

    PackageManager相关 本类API是对全部基于载入信息的数据结构的封装,包含下面功能: 安装,卸载应用查询permission相关信息 查询Application相关信息(applicati ...

随机推荐

  1. openstack neutron debugs lists

  2. linux mysql默认安装在哪个目录

    MySQL安装完成后不象SQL Server默认安装在一个目录,它的数据库文件.配置文件和命令文件分别在不同的目录,了解这些目录非常重要,尤其对于Linux的初学者,因为 Linux本身的目录结构就比 ...

  3. zookeeper[6] zookeeper FAQ(转)

    转自:http://www.cnblogs.com/zhengran/p/4601855.html 1. 如何处理CONNECTION_LOSS?在Zookeeper中,服务器和客户端之间维持一个长连 ...

  4. JavaScript 去除数组重复成员

    [...new Set(array)] 运用 Set结构不会添加重复的值 和...解构 function dedupe(array) { return Array.from(new Set(array ...

  5. C++编程规范之12:懂得何时和如何进行并发性编程

    摘要: 如果应用程序使用了多个线程或者进程,应该知道如何尽量减少共享对象,以及如何安全地共享必须共享的对象. 在多线程和并发编程中最重要的是要避免死锁.活锁和恶性的竞争条件. 在编写多线程程序时要注意 ...

  6. Linux(CentOS 5.5) Redis安装

    一,什么是redis redis是一个key-value存储系统. 和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset ...

  7. Ubuntu安装配置Qt环境

    安装 QT4.8.6库+QT Creator 2.4.1 下载地址发布 QT4.8.6库  http://mirrors.hustunique.com/qt/official_releases/qt/ ...

  8. REST深入浅出

    不知你是否意识到,围绕着什么才是实现异构的应用到应用通信的“正确”方式,一场争论正进行的如火如荼:虽然当前主流的方式明显地集中在基于SOAP.WSDL和WS-*规范的Web Services领域,但也 ...

  9. 输入一个字符串,输出时数字倒序。例如:输入"hello2345wo7654",输出则为"hello5432wo4567"

    public class ReserveString { public static void main(String[] args) { System.out.println("Pleas ...

  10. 国外.net学习资源网站

    转载 :出处:http://www.cnblogs.com/kingjiong/ 名称:快速入门地址 http://chs.gotdotnet.com/quickstart/ 描述:本站点是微软.NE ...