可折叠的listview 之ExpandableListView基本使用
先看效果
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基本使用相关推荐
- ExpandableListView简介
学习笔记,欢迎指导. 最近做了一个项目,需要一个层级列表,完成之后,就顺便来做个博客简介一下. △基本简介 →"ExpandableListView"是对"ListVie ...
- Android开发中ExpandableListView的基本用法(总结)
ExpandableListView是一个可折叠的ListView. 效果如下: 思路: 1.创建数据适配器,继承与BaseExpandableListAdapter.(实现相应的重写方法) 2.创建 ...
- java listview控件_ListView普通列表控件的使用
Android中的列表空间非常灵活,可以自定义每一个列表项,实际上每一个列表项就是一个View,在Android定义了3个列表控件:ListView.ExpandableListView和Spinne ...
- [Android]BaseExpandableListAdapter实现可折叠列表
使用BaseExpandableListAdapter 以实现的可折叠的所谓列表,例如QQ朋友们在分组功能. 基于BaseExpandableListAdapter扩大ExpandableList说明 ...
- Android开发系列(十二) QQ联系人列表升级版——ListView和ScrollView高阶使用方法...
今天继续进行QQ界面的开发工作.前一段时间讲过ExpandableListView的使用并且设置了一个比较简单的具有子菜单效果的联系人列表,本节添加进ScrollView控件,对QQ2013版的联系人 ...
- ExpandableListview的简单使用
1.layout ,和listview一样 <ExpandableListView android:id="@+id/glkclistview" android:layout ...
- Adapter类型控件之ListView(列表控件)
(一)概述 Android中的列表控件飞创灵活,可以自定义每一个列表项,实际上每一个列表项就是一个View,在Android定义了3个列表控件:ListView.ExpandableListView和 ...
- android 开发 电台,Android 开发自己的网络收音机3——电台分类(ExpandableListView)
上一篇文章说了使用SlidingMenu开源项目实现侧滑栏,今天主要是讲解多级列表ExpandableListView的使用,以及如何使用它实现电台分类管理.ExpandableListView是An ...
- ListView--QQ联系人样式
可折叠展开的listView 逻辑代码 package com.example.week2_day4_qq;import android.os.Bundle; import android.app.A ...
- 如何自己开发一个Android APP(3)——XML和Android
XML是一种用于保存数据值的语言. XML是一种标记语言,类似于HTML--如果之前接触过Web开发的话.XML文件利用树状结构作为数据模型.通常来说,一个布局文件拥有一个根布局元素,并将其作为特定布 ...
最新文章
- 跟着感觉走,不要冲动入手,到真正低点在入手
- 2018华工计算机考研分数,2018年华南理工大学考研复试分数线
- python中df去重_Python中DataFrame去重
- CALayer与UIBezierPath
- android的md动画,Android-notes/动画体系详解.md at master · drs0214/Android-notes · GitHub
- 一分钱解锁全网视频会员?加入团队还能月入百万?
- Linux 超全实用指令大全 | CSDN 博文精选
- vuex从安装到使用
- 公众号内打开提示404_微信公众号文章内如何插入视频?
- 二、fragment使用
- Java删除文件和文件夹的方式
- WebService cxf简单入门附视频教程
- 卷积编码--维特比译码
- IT项目管理期末复习-西北大学
- Vue组件间通信:父传子(props),子传父($emit)
- 机器人零力拖动技术路线
- 数据库之查询表sc——查询缺少成绩的学生的学号和相应的课程号
- 地图上分成一块一块区域 高德地图_在谷歌地图上绘制行政区域轮廓【结合高德地图的API】...
- unity 设置 异形按钮
- 用NetCDF创建和读取NC文件