先看效果

demo实现
其他的方法和ListView的方法一样,下面来看看具体demo的实现
首先布局文件很简单,就一个控件为:

<?xml version="1.0" encoding="utf-8"?>
<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.duanlian.expendablelistviewdemo.MainActivity"><ExpandableListViewandroid:id="@+id/expendablelistview"android:layout_width="match_parent"android:layout_height="match_parent" />
</RelativeLayout>

Activity的代码和用ListView的是一样的,创建一个adapter和两个 数据源,然后绑定,具体如下:

package com.duanlian.expendablelistviewdemo;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ExpandableListView;import com.duanlian.expendablelistviewdemo.adapter.MyAdapter;import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {private ExpandableListView expandableListView;private MyAdapter myAdapter;private List<String> groupList;private List<List<String>> childList;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}private void initView() {expandableListView = (ExpandableListView) findViewById(R.id.expendablelistview);groupList = new ArrayList<>();childList = new ArrayList<>();addData("幼稚园同学",new String[]{"周杰伦","江一燕 ","佟丽娅","高圆圆","刘诗诗","刘亦菲","angleBaby","张静初","张含韵",});addData("小学同学",new String[]{"光头强","熊大","熊二","妙蛙种子","比卡丘","双蛋瓦斯","贪吃蛇"});addData("初中同学",new String[]{"苍井空","小泽玛利亚","吉泽明步","波多野结衣","爱川美里菜","小川阿佐美","桃谷绘里香","泷泽萝拉","北原多香子","石川施恩惠","北条麻妃","麻仓优","羽田爱","保坂绘里"});addData("高中同学",new String[]{"秦始皇","李世民","武则天","曹操","刘备","孙权"});addData("大学同学",new String[]{"周杰伦","江一燕 ","佟丽娅","高圆圆","刘诗诗","刘亦菲","angleBaby","张静初","张含韵",});addData("研究生同学",new String[]{"光头强","熊大","熊二","妙蛙种子","比卡丘","双蛋瓦斯","贪吃蛇"});addData("博士同学",new String[]{"苍井空","小泽玛利亚","吉泽明步","波多野结衣","爱川美里菜","小川阿佐美","桃谷绘里香","泷泽萝拉","北原多香子","石川施恩惠","北条麻妃","麻仓优","羽田爱","保坂绘里"});addData("教授同事",new String[]{"秦始皇","李世民","武则天","曹操","刘备","孙权"});addData("众仙家名册",new String[]{"苍井空","小泽玛利亚","吉泽明步","波多野结衣","爱川美里菜","小川阿佐美","桃谷绘里香","泷泽萝拉","北原多香子","石川施恩惠","北条麻妃","麻仓优","羽田爱","保坂绘里","秦始皇","李世民","武则天","曹操","刘备","孙权"});myAdapter = new MyAdapter(this,groupList,childList);expandableListView.setAdapter(myAdapter);}/*** 用来添加数据的方法*/private void addData(String group, String[] friend) {groupList.add(group);//每一个item打开又是一个不同的list集合List<String> childitem = new ArrayList<>();for (int i = 0; i < friend.length; i++) {childitem.add(friend[i]);}childList.add(childitem);}
}

然后Adapter里面需要2个item布局文件:
外层的item:

<?xml version="1.0" encoding="utf-8"?>
<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"android:background="#ed88ed"tools:context="com.duanlian.expendablelistviewdemo.MainActivity"><TextViewandroid:id="@+id/group_textview"android:layout_width="wrap_content"android:layout_height="50dp"android:gravity="center_vertical"android:layout_marginLeft="40dp"android:textSize="20sp"android:text="我的好友"/><TextViewandroid:id="@+id/group_number"android:layout_width="wrap_content"android:layout_height="50dp"android:gravity="center_vertical"android:layout_marginRight="20dp"android:textSize="15sp"android:layout_alignParentRight="true"android:text="20"/>
</RelativeLayout>

里面那层item布局:

<?xml version="1.0" encoding="utf-8"?>
<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="40dp"tools:context="com.duanlian.expendablelistviewdemo.MainActivity"><com.duanlian.expendablelistviewdemo.CircleImageViewandroid:id="@+id/child_img"android:layout_width="30dp"android:layout_height="30dp"android:layout_marginLeft="10dp"android:layout_centerVertical="true"android:src="@mipmap/duanlian"/><TextViewandroid:id="@+id/child_name"android:layout_height="40dp"android:layout_width="wrap_content"android:layout_toRightOf="@+id/child_img"android:layout_marginLeft="15dp"android:textSize="16sp"android:gravity="center_vertical"android:text="吉泽明步"/><TextViewandroid:id="@+id/child_model"android:layout_width="wrap_content"android:layout_height="40dp"android:gravity="center_vertical"android:layout_alignParentRight="true"android:layout_marginRight="5dp"android:textSize="13sp"android:text="4G"/>
</RelativeLayout>

最总要的还是在Adapter里面,他和ListView一样,也有simpleAdapter和ArrayAdapter,和BaseAdapter,我这里用的是BaseAdapter,他的adapter继承的是BaseExpandableListAdapter:

package com.example.wxpandablelistviewdemo;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.TextView;
import java.util.List;/*** Created by duanlian on 2016/9/12.*/
public class MyAdapter extends BaseExpandableListAdapter {private List<String> groupList;//外层的数据源private List<List<String>> childList;//里层的数据源private Context context;public MyAdapter(Context context, List<String> groupList,List<List<String>> childList ){this.context = context;this.groupList = groupList;this.childList = childList;}@Overridepublic int getGroupCount() {return groupList.size();}/*** 这个返回的一定要是对应外层的item里面的List集合的size* @param groupPosition* @return*/@Overridepublic int getChildrenCount(int groupPosition) {return childList.get(groupPosition).size();}@Overridepublic Object getGroup(int groupPosition) {return groupPosition;}@Overridepublic Object getChild(int groupPosition, int childPosition) {return childList.get(groupPosition).get(childPosition);}@Overridepublic long getGroupId(int groupPosition) {return groupPosition;}@Overridepublic long getChildId(int groupPosition, int childPosition) {return childPosition;}@Overridepublic boolean hasStableIds() {return true;}@Overridepublic View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {convertView = View.inflate(context, R.layout.item_group, null);//分组名字TextView textView = (TextView) convertView.findViewById(R.id.group_textview);//子元素的个数TextView number = (TextView) convertView.findViewById(R.id.group_number);number.setText(childList.get(groupPosition).size()+"个");textView.setText(groupList.get(groupPosition));return convertView;}@Overridepublic View getChildView(int groupPosition, int childPosition, boolean isLastChild, View view, ViewGroup viewGroup) {view = View.inflate(context, R.layout.item_child, null);TextView textView = (TextView) view.findViewById(R.id.child_name);//外层的分组名字textView.setText(childList.get(groupPosition).get(childPosition));return view;}@Overridepublic boolean isChildSelectable(int groupPosition, int childPosition) {return true;}
}

demo地址:https://download.csdn.net/download/heishuai123/10941739
原博客地址:https://blog.csdn.net/dl10210950/article/details/52525492

转载于:https://www.cnblogs.com/wzqnxd/p/10330487.html

可折叠的listview 之ExpandableListView基本使用相关推荐

  1. ExpandableListView简介

    学习笔记,欢迎指导. 最近做了一个项目,需要一个层级列表,完成之后,就顺便来做个博客简介一下. △基本简介 →"ExpandableListView"是对"ListVie ...

  2. Android开发中ExpandableListView的基本用法(总结)

    ExpandableListView是一个可折叠的ListView. 效果如下: 思路: 1.创建数据适配器,继承与BaseExpandableListAdapter.(实现相应的重写方法) 2.创建 ...

  3. java listview控件_ListView普通列表控件的使用

    Android中的列表空间非常灵活,可以自定义每一个列表项,实际上每一个列表项就是一个View,在Android定义了3个列表控件:ListView.ExpandableListView和Spinne ...

  4. [Android]BaseExpandableListAdapter实现可折叠列表

    使用BaseExpandableListAdapter 以实现的可折叠的所谓列表,例如QQ朋友们在分组功能. 基于BaseExpandableListAdapter扩大ExpandableList说明 ...

  5. Android开发系列(十二) QQ联系人列表升级版——ListView和ScrollView高阶使用方法...

    今天继续进行QQ界面的开发工作.前一段时间讲过ExpandableListView的使用并且设置了一个比较简单的具有子菜单效果的联系人列表,本节添加进ScrollView控件,对QQ2013版的联系人 ...

  6. ExpandableListview的简单使用

    1.layout ,和listview一样 <ExpandableListView android:id="@+id/glkclistview" android:layout ...

  7. Adapter类型控件之ListView(列表控件)

    (一)概述 Android中的列表控件飞创灵活,可以自定义每一个列表项,实际上每一个列表项就是一个View,在Android定义了3个列表控件:ListView.ExpandableListView和 ...

  8. android 开发 电台,Android 开发自己的网络收音机3——电台分类(ExpandableListView)

    上一篇文章说了使用SlidingMenu开源项目实现侧滑栏,今天主要是讲解多级列表ExpandableListView的使用,以及如何使用它实现电台分类管理.ExpandableListView是An ...

  9. ListView--QQ联系人样式

    可折叠展开的listView 逻辑代码 package com.example.week2_day4_qq;import android.os.Bundle; import android.app.A ...

  10. 如何自己开发一个Android APP(3)——XML和Android

    XML是一种用于保存数据值的语言. XML是一种标记语言,类似于HTML--如果之前接触过Web开发的话.XML文件利用树状结构作为数据模型.通常来说,一个布局文件拥有一个根布局元素,并将其作为特定布 ...

最新文章

  1. 跟着感觉走,不要冲动入手,到真正低点在入手
  2. 2018华工计算机考研分数,2018年华南理工大学考研复试分数线
  3. python中df去重_Python中DataFrame去重
  4. CALayer与UIBezierPath
  5. android的md动画,Android-notes/动画体系详解.md at master · drs0214/Android-notes · GitHub
  6. 一分钱解锁全网视频会员?加入团队还能月入百万?
  7. Linux 超全实用指令大全 | CSDN 博文精选
  8. vuex从安装到使用
  9. 公众号内打开提示404_微信公众号文章内如何插入视频?
  10. 二、fragment使用
  11. Java删除文件和文件夹的方式
  12. WebService cxf简单入门附视频教程
  13. 卷积编码--维特比译码
  14. IT项目管理期末复习-西北大学
  15. Vue组件间通信:父传子(props),子传父($emit)
  16. 机器人零力拖动技术路线
  17. 数据库之查询表sc——查询缺少成绩的学生的学号和相应的课程号
  18. 地图上分成一块一块区域 高德地图_在谷歌地图上绘制行政区域轮廓【结合高德地图的API】...
  19. unity 设置 异形按钮
  20. 用NetCDF创建和读取NC文件

热门文章

  1. Html 实现amr文件播放
  2. LSD_SLAM编译之一气呵成法
  3. 四川山海蓝图抖音播放量
  4. 《动手学深度学习》(PyTorch版)代码注释 - 52 【World2Vec_Learning】
  5. 【用Python对全职高手小说分析分词词频词性,小说人物出场次数排序,小说中食物排序,小说人物关系等等】
  6. 错误数据(图片)去除
  7. python读写html文件乱码问题
  8. 资产证券化:国际借鉴与中国实践案例 读后感
  9. Eclipse更换护眼背景色——传说中的绿豆沙
  10. 如何在WIN10系统中设置护眼颜色绿豆沙?