android 之 ExpandableListView列表中的列表

有时候,我们需要设计这样一个界面,外面有一个列表,当我们点击其中列表中的某个条目时,就会展开这个条目,出现一个新的列表。比如下图:(程序运行的效果图,在这里贴出来)

当我们点击第一项时,视图变为:

------------------------------------------------------------------------------------------------------------------------------

为了实现这样的效果,需要定义三个布局,包括显示的main_activity(主布局),group(第一级列表布局),child(第二级列表布局),下面贴代码,解释都在注释里面:

main_activity:

<LinearLayout 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"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.expandlistaacitvity.MainActivity" >

    <!-- android文档中要求ExpandableListView的id必须为list,否则会抛出错误,有兴趣的可以试试
           #ff0000 为红色
        drawSelectorOntop=false是设置当你选中某一项时,任能清楚显示当前项(我试了试好像没有什么改变。。。。)-->
    <ExpandableListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:drawSelectorOnTop="false"/>

    <!-- 当上面没有数据可以显示时,就会显示这个TextView。这个id也规定必须用empty,否者前面的话就没作用了 -->
    <TextView
        android:id="@android:id/empty"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#ff0000"
        android:text="no data" />

</LinearLayout>

group.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <!-- 这个是定义的第一级列表的布局
    #0000ff是深青色 -->
    <TextView
        android:id="@+id/groupTo"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:background="#0000ff"
        android:paddingTop="20dp"
        android:paddingLeft="60dp"
        android:paddingBottom="10dp"
        android:textSize="26sp"
        android:text="no data"/>
</LinearLayout>

child.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="5dp"
    android:orientation="vertical" >

    <!-- 这里定义的是列表中的第二级列表 ,当没有数据时,显示no data-->
    <TextView
        android:id="@+id/childTo"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:paddingTop="20dp"
        android:paddingLeft="50dp"
        android:paddingBottom="10dp"
        android:background="#00ff00"
        android:text="no data"/>
</LinearLayout>

接下来是主活动了,同样解释在代码里:

package com.example.expandlistaacitvity;

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.widget.SimpleExpandableListAdapter;

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>();
        group1.put("group", "group1第一级列表one");
        groups.add(group1);
        Map<String,String> group2 = new HashMap<String, String>();
        group2.put("group", "group2第一级列表two");
        groups.add(group2);

        //定义一个list,里面存放的是第一个一级条目中的二级条目
        List<Map<String, String>> child1 = new ArrayList<Map<String,String>>();
        Map<String, String> child1Date1 = new HashMap<String, String>();
        child1Date1.put("child", "clild1date1第二级列表");
        child1.add(child1Date1);
        Map<String, String> child1Date2 = new HashMap<String, String>();
        child1Date2.put("child", "child1Date2第二级列表");
        child1.add(child1Date2);

        //定义一个List,为第二个一级条目的二级条目
        List<Map<String, String>> child2 = new ArrayList<Map<String,String>>();
        Map<String, String> child2Date1 = new HashMap<String, String>();
        child2Date1.put("child", "child222Date1第二级列表");
        child2.add(child2Date1);

        //将两个二级条目放入到list中
        List<List<Map<String, String>>> childs = new ArrayList<List<Map<String,String>>>();
        childs.add(child1);
        childs.add(child2);

        /*
         * 1.上下文
         * 2.一级列表的数据,包含各个group
         * 3.指定一级列表的布局
         * 4.指定一级列表的key
         * 5.指定一级条目的控件显示的id
         * 下面同上
         */
        SimpleExpandableListAdapter simpleExpandableListAdapter = 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(simpleExpandableListAdapter);
    }
}
时间: 2024-10-24 22:45:26

android 之 ExpandableListView列表中的列表的相关文章

Python(36)_循环打印列表中的列表

#-*-coding:utf-8-*- ''' 打印列表,遇到列表中的列表也循环打印 ''' li = [1,2,3,[1,2,3,5,6],'hjaha'] lie = [] #print(type(li[0])) #print(type(li)) for i in li: if type(i) != type(li): print(i) else: for j in i: print(j) 原文地址:https://www.cnblogs.com/sunnybowen/p/10205106.

android中用ExpandableListView实现三级扩展列表

工作中遇到一个选择车型的问题,需要在扩展列表中选择车辆品牌->车型->年款,所以必须得使用三级的扩展列表来实现,而且第三级还得使用GridView来展示.下面就一步步来吧. 1.定义需要使用的车型类,每个车辆品牌下面包含n个车型,每个车型下面包含n个年款 点击(此处)折叠或打开 /** * 汽车的品牌类 * * @author liyanshun 2014-2-21 */ public class CarBrand { /** * 汽车的品牌名字 */ public String mBrand

ol列表中的列表项不显示

在写CSS的时候我们习惯在头部写 *{ margin:0px; padding:0px; } 或者,引入reset.css文件中.但是这个文件中也有对常用元素的边距置零的设置: 原因就在这个地方,默认li的list-style-position:outside,但是padding-left为0,所以,列表项就没有地方可以显示,如果padding-left设置为30px左右的话,就可以看到:

Python3基础 list 访问列表中的列表的元素

? ???????Python : 3.7.0 ?????????OS : Ubuntu 18.04.1 LTS ????????IDE : PyCharm 2018.2.4 ??????Conda : 4.5.11 ???typesetting : Markdown ? code """ @Author : 行初心 @Date : 18-9-23 @Blog : www.cnblogs.com/xingchuxin @Gitee : gitee.com/zhichengji

每日学习心得:SharePoint 为列表中的文件夹添加子项(文件夹)、新增指定内容类型的子项、查询列表中指定的文件夹下的内容

前言: 这里主要是针对列表中的文件下新增子项的操作,同时在新建子项时,可以为子项指定特定的内容类型,在某些时候需要查询指定的文件夹下的内容,针对这些场景都一一给力示例和说明,都是一些很小的知识点,希望能够对大家有所帮助. 1.   在列表中为列表项添加子项 为列表添加子项大家都很熟悉,但是如何为列表项添加子项呢?例如列表项是一个文件夹,如何为该文件夹添加子项呢?这里就用到了List.AddItem()方法,具体示例如下: 首先我们要获取列表中的子项: SPListItem root_item=l

python中的列表3

一.列表的一些常用操作符 1.比较操作符 当列表中有多个元素时,列表间只比较第0个元素. >>> list1 = [1,2] >>> list2 = [2,1] >>> list1 > list2 False 2.逻辑操作符 >>> list1 = [1,2] >>> list2 = [2,1] >>> list3 = [1,2] >>> (list1 < list2)

Python3基础 not in列表名 判断一个元素是否不在列表中列表中

镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ 1 code 1 aList=[1,2,3,4,[5,6]] 2 result=5 not in aList 3 print(result) 注:列表中的列表,in 不支持查询的 2 show ------------------------------------------博文的精髓,在技术部

Android 利用ExpandableListView显示和查询仿QQ分组列表用户信息

在我们的项目开发过程中,经常会对用户的信息进行分组,即通过组来显示用户的信息,同时通过一定的查询条件来显示查询后的相关用户信息,并且通过颜色选择器来设置列表信息的背景颜色. 其中借鉴xiaanming:http://blog.csdn.net/xiaanming/article/details/12684155 下面来看看项目运行后的效果图以及代码结构图: 下面通过代码来实现整个效果. 1.主界面布局activity_main.xml <span style="font-size:18px

Android N 设置中语言列表介绍

Android N上语言列表与N之前有很大变化,进入语言列表,可看到如图1所示,图中上面的框框是系统用户所选择的语言(Android N上用户可以选择好几种语言,排在第一个是系统的语言), 下面的框框是一个添加语言的按钮,点击之后可以去添加语言,点击之后会进入一个语言列表供选择添加,所图2所示,这个列表中分成两部分,上面部 分"Suggested", 下面部分是"All Languages".出现在"Suggested"中的language点击之