ExpandableListView使用方法详解

article/2025/11/4 16:07:25

一、前言

  “好记性不如烂笔头”,再次验证了这句话是真的很有道理啊,一个月前看了一下ExpandableListView的使用,今天再看居然忘了这个是干啥的了,今天就详细讲解一下ExpandableListView的使用方法,感觉对于二级条目显示功能都可以实现。

二、实现的功能

1、可实现二级列表条目显示功能,具体包括可自定义,父布局和子布局。可实现父布局全部展开和只展开一个功能。

三、具体代码

1、主xml代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:orientation="vertical"android:layout_height="match_parent"><include layout="@layout/top"/><ExpandableListViewandroid:id="@+id/expand_list_id"android:layout_width="match_parent"android:groupIndicator="@null"android:layout_height="match_parent"></ExpandableListView>
</LinearLayout>

2、父布局xml代码

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:background="@color/blue"android:layout_height="50dp"><TextViewandroid:id="@+id/parent_textview_id"android:layout_width="wrap_content"android:text="测试"android:textColor="@color/white"android:gravity="center_vertical"android:paddingLeft="10dp"android:textSize="18sp"android:layout_height="match_parent" /><ImageViewandroid:id="@+id/parent_image"android:layout_width="wrap_content"android:layout_alignParentRight="true"android:src="@drawable/img_arrow_right"android:layout_centerInParent="true"android:paddingRight="10dp"android:layout_height="wrap_content" /></RelativeLayout>

3、子布局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"><TextViewandroid:id="@+id/chidren_item"android:layout_width="match_parent"android:text="子项目"android:gravity="center_vertical"android:paddingLeft="10dp"android:textColor="@color/black"android:layout_height="40dp" /></LinearLayout>

4、主activity代码

*** Created by fyf on 2019/3/1.* 描述:用于实现ExpandableListView的类,主要功能是实现二级列表条目显示*/
public class ExpandableListviewActivity extends BaseActivity {private ExpandableListView expand_list_id;//Model:定义的数据private String[] groups = {"开发部", "人力资源部", "销售部"};//注意,字符数组不要写成{{"A1,A2,A3,A4"}, {"B1,B2,B3,B4,B5"}, {"C1,C2,C3,C4"}}private String[][] childs = {{"赵珊珊", "钱丹丹", "孙可可", "李冬冬"}, {"周大福", "吴端口", "郑非", "王疯狂"}, {"冯程程", "陈类", "楚哦", "魏王"}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.expandable_list_view);setTitle("ExpandableListView二级下拉",false,"");initView();}private void initView(){expand_list_id=findViewById(R.id.expand_list_id);ExpandableListviewAdapter adapter=new ExpandableListviewAdapter(this,groups,childs);expand_list_id.setAdapter(adapter);//默认展开第一个数组expand_list_id.expandGroup(0);//关闭数组某个数组,可以通过该属性来实现全部展开和只展开一个列表功能//expand_list_id.collapseGroup(0);expand_list_id.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {@Overridepublic boolean onGroupClick(ExpandableListView expandableListView, View view, int groupPosition, long l) {showToastShort(groups[groupPosition]);return false;}});//子视图的点击事件expand_list_id.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {@Overridepublic boolean onChildClick(ExpandableListView expandableListView, View view, int groupPosition, int childPosition, long l) {showToastShort(childs[groupPosition][childPosition]);return true;}});//用于当组项折叠时的通知。expand_list_id.setOnGroupCollapseListener(new ExpandableListView.OnGroupCollapseListener() {@Overridepublic void onGroupCollapse(int groupPosition) {showToastShort("折叠了数据___"+groups[groupPosition]);}});////用于当组项折叠时的通知。expand_list_id.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {@Overridepublic void onGroupExpand(int groupPosition) {showToastShort("展开了数据___"+groups[groupPosition]);}});}
}

5、adapter代码

/*** Created by fyf on 2019/3/1.* 描述:是二级显示列表的adapter*/
public class ExpandableListviewAdapter extends BaseExpandableListAdapter {//Model:定义的数据private String[] groups;//注意,字符数组不要写成{{"A1,A2,A3,A4"}, {"B1,B2,B3,B4,B5"}, {"C1,C2,C3,C4"}}private String[][] childs;private Context context;public ExpandableListviewAdapter(Context context,String[] groups,String[][] childs){this.context=context;this.groups=groups;this.childs=childs;}@Overridepublic int getGroupCount() {return groups.length;}@Overridepublic int getChildrenCount(int i) {return childs[i].length;}@Overridepublic Object getGroup(int i) {return groups[i];}@Overridepublic Object getChild(int i, int i1) {return childs[i][i1];}@Overridepublic long getGroupId(int i) {return i;}@Overridepublic long getChildId(int i, int i1) {return i1;}@Override//分组和子选项是否持有稳定的ID, 就是说底层数据的改变会不会影响到它们public boolean hasStableIds() {return true;}@Override
/**** 获取显示指定组的视图对象** @param groupPosition 组位置* @param isExpanded 该组是展开状态还是伸缩状态,true=展开* @param convertView 重用已有的视图对象* @param parent 返回的视图对象始终依附于的视图组*/public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {GroupViewHolder groupViewHolder;if (convertView == null){convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.expand_parent_item,parent,false);groupViewHolder = new GroupViewHolder();groupViewHolder.parent_textview_id = convertView.findViewById(R.id.parent_textview_id);groupViewHolder.parent_image = convertView.findViewById(R.id.parent_image);convertView.setTag(groupViewHolder);}else {groupViewHolder = (GroupViewHolder)convertView.getTag();}groupViewHolder.parent_textview_id.setText(groups[groupPosition]);//如果是展开状态,if (isExpanded){groupViewHolder.parent_image.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.img_arrow_down));}else{groupViewHolder.parent_image.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.img_arrow_right));}return convertView;}@Overridepublic View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {ChildViewHolder childViewHolder;if (convertView==null){convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.expand_chidren_item,parent,false);childViewHolder = new ChildViewHolder();childViewHolder.chidren_item = (TextView)convertView.findViewById(R.id.chidren_item);convertView.setTag(childViewHolder);}else {childViewHolder = (ChildViewHolder) convertView.getTag();}childViewHolder.chidren_item.setText(childs[groupPosition][childPosition]);return convertView;}//指定位置上的子元素是否可选中@Overridepublic boolean isChildSelectable(int i, int i1) {return true;}static class GroupViewHolder {TextView parent_textview_id;ImageView parent_image;}static class ChildViewHolder {TextView chidren_item;}
}

 


http://chatgpt.dhexx.cn/article/cSaayi6D.shtml

相关文章

ExpandableList的使用

首先&#xff0c;我们把一二级选择的对应的类写好。 看这些代码&#xff0c;最主要的是我在ParentStrings中写了一个List<ChildrenStrings>的一个方法&#xff0c;以便之后ChildrenStrings的存储和调用 下面是BusAdapter继承BaseExpandableAdapter public class BusAda…

可折叠列表ExpandableList

ExpandableList就是可展开的ListView 首先我们来看一下页面的布局 expandlist_layout.xml文件 <RelativeLayoutxmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:tools"htt…

Adapter类控件使用之ExpandableList(可折叠式列表)的基本使用

(一)概述 本节要讲解的Adapter类控件是ExpandableListView,就是可折叠的列表,它是 ListView的子类, 在ListView的基础上它把应用中的列表项分为几组,每组里又可包含多个列表项。至于 样子, 类似于QQ联系人列表,他的用法与ListView非常相似,只是ExpandableListViv…

如果在临汾遇见你

哈 如果在临汾遇见你&#xff0c;那么&#xff0c;我们一定要去平阳南街煤化巷口的宾库西餐厅&#xff0c;坐在只需消费15块钱就可以坐一整天的大厅散座上&#xff0c;聊着我们相见恨晚的话题。 如果在临汾遇见你&#xff0c;那么&#xff0c;我们一定要去传说的尧庙&#xff0…

吃完7家互联网大厂食堂,我回去就把老板开了

本文转载自 超人测评 不会还有人不知道&#xff08;中文&#xff09;字节跳动&#xff08;英文&#xff09;Bytedance的工牌&#xff0c;已经成为年轻人的社交货币了吧。 有人说它是“相亲市场的硬通货”&#xff0c;也有人将它称为“2021年最潮流时尚单品”。每当你在奶茶店…

围剿宏光MINI

NEW 关注Tech逆向思维视频号 最新视频→【做核酸&#xff1f;打疫苗&#xff1f;3分钟假期安全出行攻略】 出品&#xff5c;深途 文&#xff5c;黎明 编辑&#xff5c; 魏佳 有很长一段时间&#xff0c;汽车企业的老板和投资人&#xff0c;都热衷于造“大车”。蔚来、小鹏、威马…

《植物大战僵尸》的12个成功秘诀

口述 / James Gwertzman 整理 / 杨东杰 [caption id"attachment_6675" align"alignleft" width"263" caption"James Gwertzman PopCap亚太区总裁"] [/caption] 4月28日&#xff0c;在由长城会和CSDN联合主办的“开发者星球——TUP大…

只要10分钟,搭建属于个人的炫酷网站,你还在犹豫什么?

&#x1f482; 个人主页: IT学习日记&#x1f91f; 版权: 本文由【IT学习日记】原创、在CSDN首发、需要转载请联系博主&#x1f4ac; 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦&#x1f485; 想寻找共同成长的小伙伴&#xff0c;请点击【技术圈子】 文章…

我的股票投资原则:专注业绩好、看得懂的消费品行业

本文概要&#xff1a;文以载道。总结了过往的经验教训&#xff0c;明确了未来的投资方向和股票投资圈。 我是一名Java程序员&#xff0c;今年心情有点烦躁&#xff0c;没怎么有耐心写工作之外的代码。 同时&#xff0c;我也是一名业余投资人&#xff0c;所以今年就又花了大量…

最近回了趟家,随便拍的照片

先贴下家对面的东山。呵呵。看上去光秃秃的。不过我看上去只有很深的亲切。 家里盖被子的东西 我大哥房间里面别人送的&#xff0d;&#xff0d;&#xff0d;堆绣  是我们湟中的一种农民搞的艺术品 家里的酸奶。  呵呵&#xff0c;大家很多人都记得西宁街头的那种勺子挖着…

破解网址_中国目前的破解组织大全

中国目前的破解组织大全&#xff08;2009版&#xff09;——[TFW]find31作品 管理提醒&#xff1a; 本帖被 朕很伤心 从 『 风云AD区 』 移动到本区(2009-06-23) 破解组织前管理员告诉你中国目前的破解组织现状——看了某个N年前的帖子而发&#xff0c;说实话我真的不忍心再看…

推荐 10 个不错的网络监视工具

点击上方“民工哥技术之路”选择“置顶或星标” 每天10点为你分享不一样的干货 有几个网络监视工具可以用于不同的操作系统。在这篇文章中&#xff0c;我们将讨论从 Linux 终端中运行的 10 个网络监视工具。 它对不使用 GUI 而希望通过 SSH 来保持对网络管理的用户来说是非常理…

【Java】Socket网络编程实现内网穿透、端口映射转发、内网穿透上网工具的编写,设置IP白名单防火墙

这里写目录标题 简介更新 一、背景1.1 情景假设1.2 想要达到的目的1.3 局限1.3 解决方案一&#xff08;路由器NAT&#xff09;1.4 解决方案二&#xff08;云服务器转发&#xff09; 二、方案介绍2.1 方案简介2.2 具体流程2.3 编程要点2.4 关于web管理IP白名单的更新2.5 关于soc…

计算机网络--Windows网络测试工具

实验目的 理解上述知识点所涉及的基本概念并学会使用这些工具测试网络的状态及从网上获取信息。 实验环境 安装了TCP/IP协议的Windows系统&#xff0c;包含实用的网络工具。 实验内容 完成下列要求&#xff0c;并记录实验步骤和结果 1、 检测本机的MAC地址 2、 检测本机网…

【小工具的制作】制作一个通过HTTP请求来实现上网认证的自动登录小工具

目录 1. 前言2. 分析3. 编码3.1 Python版3.1.1 编写Python脚本3.1.2 下载Python转EXE程序工具3.1.3 打包成EXE程序 3.2 Java版3.2.1 编写代码 4. 最后一步5. 总结 1. 前言 由于学校机房联网时&#xff0c;总是需要登录个人账号。为实现快速登录&#xff0c;我们就此问题给出了自…

常见的网络抓包工具推荐

因为发现好多人想抓包&#xff0c;但是不知道有哪些工具&#xff0c;今天我给大家推荐几款抓包工具&#xff0c;希望对大家有所帮助。 网络抓包工具的用途 网络抓包工具的主要功能是将网络执行的过程&#xff0c;详细的记录下来。如果你是一个程序员&#xff0c;肯定对网络抓…

【转】Fiddler抓包工具手机添加代理后连不上网解决办法

转载&#xff1a;Fiddler抓包工具手机添加代理后连不上网解决办法_数据结构和算法的博客-CSDN博客 最近&#xff0c;在工作中需要测试一个监控网络请求的SDK&#xff0c;需要校验该SDK记录的耗时数据的准确性。根据网上大神们提供的工作经验&#xff0c;可以利用Fiddler工具给…

超好用的网络小工具

整理了一下一些自己使用的网络链路状态测试工具。 一、RAWCAP-本地回路抓包 本地使用wireshark无法抓回路包&#xff0c;为此百度了一下RawCap可以抓回路包&#xff0c;亲测可用。特记录下来。 缺点&#xff1a;有一些系统需要安装Microsoft .NET Framework 4 https://www.m…

8大轻型网管工具,网络管理好帮手

从设备发现到系统、网络和流量可视性&#xff0c;这些轻型的网管工具非常实用。在网络和服务器世界&#xff0c;重点是可视性、可视性、可视性&#xff0c;如果你不知道你的网络和服务器在每天每秒正在做什么&#xff0c;你很可能会出问题。幸运的是&#xff0c;这里有很多好工…

上网本之必备网络工具推荐

伴随着中国3G无线网络的全面商用运营&#xff0c;“上网本”已经成为2009年最炙手可热的词汇之一。“上网本”便宜实惠、小巧便携&#xff0c;但低配置却是它的一个软肋&#xff0c;所以能够完全配合“上网本”使用的低耗能软件似乎并不多。这里&#xff0c;笔者结合自己的一些…