Android数据适配-ExpandableListView

Android中ListView的用法基本上学的时候都会使用,其中可以使用ArrayAdapter,SimpleAdapter,BaseAdapter去实现,这次主要使用的ExpandableListView展示一种两层的效果,ExpandableListView是android中可以实现下拉list的一个控件类似于QQ那种我好友之后就是一排自己的好友,就是两层效果,实现的话使用SimpleExpandableListAdapter即可。

布局文件

先看下效果

main中xml代码:

1
2
3
4
5
6
7
8
9
10
11
<Button
      android:onClick="test"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="FlyElephant" />
  <ExpandableListView
      android:id="@id/android:list"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:drawSelectorOnTop="false" />

 定义一个省份的province.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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" >
    <TextView
        android:id="@+id/list_provinceText"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:paddingBottom="8px"
        android:paddingLeft="30px"
        android:paddingRight="5px"
        android:paddingTop="8px"
        android:textSize="20sp" />
</LinearLayout>

定义了一个地区的child.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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" >
     
       <TextView
        android:id="@+id/child_text"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:paddingBottom="8px"
        android:paddingLeft="30px"
        android:paddingRight="5px"
        android:paddingTop="8px"
        android:textSize="20sp" />
     
</LinearLayout>

 Demo实现

主要实现代码,代码中都已经注释,其中最主要的SimpleExpandableListAdapter中的参数,这个参数太多,很容易弄错,可以看下注释或者API文档:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// 创建一级条目
 List<Map<String, String>> provinces = new ArrayList<Map<String, String>>();
 //创建两个省份一级条目
 Map<String, String> firstProvince= new HashMap<String, String>();
 firstProvince.put("province""河南");
 Map<String, String> secondProvince= new HashMap<String, String>();
 secondProvince.put("province""北京");
 provinces.add(firstProvince);
 provinces.add(secondProvince);
 // 创建一级条目下的的二级地区条目
 List<Map<String, String>> childList1= new ArrayList<Map<String, String>>();
 //同样是在一级条目目录下创建两个对应的二级条目目录
 Map<String, String> child1= new HashMap<String, String>();
 child1.put("child""郑州");
 Map<String, String> child2 = new HashMap<String, String>();
 child2.put("child""开封");
 childList1.add(child1);
 childList1.add(child2);
 //同上
 List<Map<String, String>> childList2 = new ArrayList<Map<String, String>>();
 Map<String, String> child3 = new HashMap<String, String>();
 child3.put("child""海淀");
 Map<String, String> child4 = new HashMap<String, String>();
 child4.put("child""昌平");
 childList2.add(child3);
 childList2.add(child4);
 // 将二级条目放在一个集合里,供显示时使用
 List<List<Map<String, String>>> childs = new ArrayList<List<Map<String, String>>>();
 childs.add(childList1);
 childs.add(childList2);
 /**
  * 使用SimpleExpandableListAdapter显示ExpandableListView
  * 参数1.上下文对象Context
  * 参数2.一级条目目录集合
  * 参数3.一级条目对应的布局文件
  * 参数4.fromto,就是map中的key,指定要显示的对象
  * 参数5.与参数4对应,指定要显示在groups中的id
  * 参数6.二级条目目录集合
  * 参数7.二级条目对应的布局文件
  * 参数8.fromto,就是map中的key,指定要显示的对象
  * 参数9.与参数8对应,指定要显示在childs中的id
  */
 SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter(
         this, provinces, R.layout.list_group, new String[] { "province" },
         new int[] { R.id.list_groupText }, childs, R.layout.child,
         new String[] { "child" }, new int[] { R.id.child_text });
 setListAdapter(adapter);

这个mainActivity需要继承ExpandableListActivity,当然你可以设置其中的点击事件,只要重写一下方法即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/**
 * 设置哪个二级目录被默认选中
 */
@Override
public boolean setSelectedChild(int groupPosition, int childPosition,
        boolean shouldExpandGroup) {
        //do something
    return super.setSelectedChild(groupPosition, childPosition,
            shouldExpandGroup);
}
/**
 * 设置哪个一级目录被默认选中
 */
@Override
public void setSelectedGroup(int groupPosition) {
    //do something
    super.setSelectedGroup(groupPosition);
}
/**
 * 当二级条目被点击时响应
 */
@Override
public boolean onChildClick(ExpandableListView parent, View v,
        int groupPosition, int childPosition, long id) {
        //do something
    return super.onChildClick(parent, v, groupPosition, childPosition, id);
}

 效果如下:

 

上面这个例子写的有点单调,其实第二个你子的布局直接是空的也行,例如定义一个images.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >
    <ImageView
        android:src="@drawable/open"
        android:layout_width="20dp"
        android:layout_height="20dp" />
    <TextView
        android:id="@+id/txtName"
       android:paddingLeft="10dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

然后定义一个items.xml

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/items"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >
     
</TextView>

 代码调用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
public class MyExpandleActivity extends Activity {
    /**
     * 实现可扩展展开列ExpandableListView的三种方式
     * 一是使用SimpleExpandableListAdpater将两个List集合包装成ExpandableListView 二是
     * 扩展BaseExpandableListAdpter
     * 三是使用simpleCursorTreeAdapter将Cursor中的数据包装成SimpleCuroTreeAdapter
     */
    private String[] names = { "腾讯""百度""阿里巴巴" };
    private String[][] childnames = { { "马化腾""张小龙","社交"},
            "李彦宏""马东敏","搜索" }, { "马云""陆兆禧","电商" } };
    private ExpandableListView ep;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_expandle);
        // 定义父列表项List数据集合
        List<Map<String, String>> group = new ArrayList<Map<String, String>>();
        // 定义子列表项List数据集合
        List<List<Map<String, String>>> ss = new ArrayList<List<Map<String, String>>>();
        for (int i = 0; i < names.length; i++) {
            // 提供父列表的数据
            Map<String, String> maps = new HashMap<String, String>();
            maps.put("names", names[i]);
            group.add(maps);
            // 提供当前父列的子列数据
            List<Map<String, String>> child = new ArrayList<Map<String, String>>();
            for (int j = 0; j < names.length; j++) {
                Map<String, String> mapsj = new HashMap<String, String>();
                mapsj.put("map", childnames[i][j]);
                child.add(mapsj);
            }
            ss.add(child);
        }
        /**
         * 第一个参数 应用程序接口 this 第二个父列List<?extends Map<String,Object>>集合 为父列提供数据
         * 第三个参数 父列显示的组件资源文件 第四个参数 键值列表 父列Map字典的key 第五个要显示的父列组件id 第六个 子列的显示资源文件
         * 第七个参数 键值列表的子列Map字典的key 第八个要显示子列的组件id
         */
        SimpleExpandableListAdapter expand = new SimpleExpandableListAdapter(
                this, group, R.layout.images, new String[] { "names" },
                new int[] { R.id.txtName }, ss, R.layout.items,
                new String[] { "map" }, new int[] { R.id.items });
        ep = (ExpandableListView) findViewById(R.id.expanable_mylist);
        ep.setAdapter(expand);
    }
}

  效果跟上面相同:

 本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/4107356.html,如需转载请自行联系原作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/392303.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaWeb 命名规则

命名规范命名规范命名规范命名规范 本规范主要针对java开发制定的规范项目命名项目命名项目命名项目命名 项目创建&#xff0c;名称所有字母均小写&#xff0c;组合方式为&#xff1a;com.company.projectName.component.hiberarchy。1. projectName&#xff1a;项目名称2. com…

多元概率密度_利用多元论把握事件概率

多元概率密度Humans have plenty of cognitive strengths, but one area that most of us struggle with is estimating, explaining and preparing for improbable events. This theme underpins two of Nassim Taleb’s major works: Fooled by Randomness and The Black Swa…

nginx php访问日志配置,nginx php-fpm 输出php错误日志的配置方法

由于nginx仅是一个web服务器&#xff0c;因此nginx的access日志只有对访问页面的记录&#xff0c;不会有php 的 error log信息。nginx把对php的请求发给php-fpm fastcgi进程来处理&#xff0c;默认的php-fpm只会输出php-fpm的错误信息&#xff0c;在php-fpm的errors log里也看不…

SMSSMS垃圾邮件检测器的专业攻击

Note: The methodology behind the approach discussed in this post stems from a collaborative publication between myself and Irene Anthi.注意&#xff1a; 本文讨论的方法背后的方法来自 我本人和 Irene Anthi 之间 的 合作出版物 。 介绍 (INTRODUCTION) Spam SMS te…

Nagios学习实践系列

其实上篇Nagios学习实践系列——基本安装篇只是安装了Nagios基本组件&#xff0c;虽然能够打开主页&#xff0c;但是如果不配置相关配置文件文件&#xff0c;那么左边菜单很多页面都打不开&#xff0c;相当于只是一个空壳子。接下来&#xff0c;我们来学习研究一下Nagios的配置…

kvm vnc的使用,鼠标漂移等

1.宿主机的vnc&#xff08;virtual Network Computing&#xff09;配置 安装rpm包 yum install tigervnc-server -y 为了防止干扰直接关闭防火墙和selinux /etc/init.d/iptables stop setenforce 0 配置vnc密码和启动vncserver服务 vncpasswd vncserver 2.客户机的vnc 在qemu…

php深浅拷贝,JavaScript 中的深浅拷贝

工作中经常会遇到需要复制 JavaScript 数据的时候&#xff0c;遇到 bug 时实在令人头疼&#xff1b;面试中也经常会被问到如何实现一个数据的深浅拷贝&#xff0c;但是你对其中的原理清晰吗&#xff1f;一起来看一下吧&#xff01;一、为什么会有深浅拷贝想要更加透彻的理解为什…

使用Python进行地理编码和反向地理编码

Geocoding is the process of taking input text, such as an address or the name of a place, and returning a latitude/longitude location. To put it simply, Geocoding is converting physical address to latitude and longitude.地理编码是获取输入文本(例如地址或地点…

[Object-C语言随笔之三] 类的创建和实例化以及函数的添加和调用!

上一小节的随笔写了常用的打印以及很基础的数据类型的定义方式&#xff0c;今天就来一起学习下如何创建类与函数的一些随笔&#xff1b; 首先类的创建&#xff1a;在Xcode下&#xff0c;菜单File&#xff0d;New File&#xff0c;然后出现选择class模板&#xff0c;如下图&…

2024-AI人工智能学习-安装了pip install pydot但是还是报错

2024-AI人工智能学习-安装了pip install pydot但是还是报错 出现这样子的错误&#xff1a; /usr/local/bin/python3.11 /Users/wangyang/PycharmProjects/studyPython/tf_model.py 2023-12-24 22:59:02.238366: I tensorflow/core/platform/cpu_feature_guard.cc:182] This …

带彩色字体的man pages(debian centos)

1234567891011121314151617181920212223242526272829303132333435363738我的博客已迁移到xdoujiang.com请去那边和我交流简介most is a paging program that displays,one windowful at a time,the contents of a file on a terminal. It pauses after each windowful and prin…

Zabbix 3.0 从入门到精通(zabbix使用详解)

第1章 zabbix监控 1.1 为什么要监控 在需要的时刻&#xff0c;提前提醒我们服务器出问题了 当出问题之后&#xff0c;可以找到问题的根源 网站/服务器 的可用性 1.1.1 网站可用性 在软件系统的高可靠性&#xff08;也称为可用性&#xff0c;英文描述为HA&#xff0c;High Avail…

Maven基础。

---恢复内容开始--- Maven&#xff1a; 1、概念。 * maven 是一个项目管理工具。 * maven的作用。 1、jar包。依赖管理。将jar包放在jar包仓库&#xff08;pom.xml)&#xff0c;不需要每个项目都添加jar包。 2、测试。 3、项目发布。 2、使用。 * 下载解压即可。 * 环境变量配置…

Dinosaur Run - Dinosaur world Games

转载于:https://www.cnblogs.com/hotmanapp/p/7092669.html

Go_ go mod 命令解决墙的问题

简介 由于众所周知的原因&#xff0c;在下载一些库的时候会下载不了&#xff0c;比如 golang.org/x/... 相关的库。为此&#xff0c;网上出现了很多解决方案。 从 Go1.11 开始&#xff0c;Go 引入了 module&#xff0c;对包进行管理&#xff0c;通过 go mod 命令来进行相关操作…

用导函数的图像判断原函数的单调性

前言 典例剖析 例1(给定\(f(x)\)的图像&#xff0c;确定\(f(x)\)的单调性&#xff0c;最简单层次) 题目暂略。 例2(用图像确定\(f(x)\)的正负&#xff0c;确定\(f(x)\)的单调性&#xff0c;2017聊城模拟) 已知函数\(yxf(x)\)的图像如图所示(其中\(f(x)\)是函数\(f(x)\)的导函数…

朴素贝叶斯 半朴素贝叶斯_使用朴素贝叶斯和N-Gram的Twitter情绪分析

朴素贝叶斯 半朴素贝叶斯In this article, we’ll show you how to classify a tweet into either positive or negative, using two famous machine learning algorithms: Naive Bayes and N-Gram.在本文中&#xff0c;我们将向您展示如何使用两种著名的机器学习算法&#xff…

python3:面向对象(多态和继承、方法重载及模块)

1、多态 同一个方法在不同的类中最终呈现出不同的效果&#xff0c;即为多态。 class Triangle:def __init__(self,width,height):self.width widthself.height heightdef getArea(self):areaself.width* self.height / 2return areaclass Square:def __init__(self,size):sel…

深入单例模式 java,深入单例模式四

Java代码 privatestaticClass getClass(String classname)throwsClassNotFoundException {ClassLoader classLoader Thread.currentThread().getContextClassLoader();if(classLoader null)classLoader Singleton.class.getClassLoader();return(classLoader.loadClass(class…

linux下配置SS5(SOCK5)代理服务

SOCK5代理服务器 官网: http://ss5.sourceforge.net/ yum -y install gcc gcc-c automake make pam-devel openldap-devel cyrus-sasl-devel 一、安装 # tar xvf ss5-3.8.9-5.tar.gz # cd ss5-3.8.9-5 # ./configure && make && make install 二、修改配置文…