Android-UI控件-ExpandableListView

Android界面设计:常用控件与动画效果演示 ExpandableListView是Android开发中常用的一个控件,它允许用户在一个列表中展开和折叠不同的组。这在展示结构化数据时非常有用,尤其是当数据层次比较复杂时。使用此控件可以有效提升用户界面的互动性和信息的组织性。SeekBar控件是Android中用于显示一个可滑动的进度条,它可以接收用户的滑动操作来反映一个进度的变化,常用于声音大小调整、进度显示等场景。 阅读详情

ExpandableListView

一种用于垂直滚动展示两级列表的视图,和 ListView 的不同之处就是它可以展示两级列表,分组可以单独展开显示子选项。这些选项的数据是通过 ExpandableListAdapter 关联的。

实现ExpandableAdapter的方式:
1.使用SimpleExpandableListAdapter将两个List集合包装成ExpandableAdapter
2.扩展BaseExpandableListAdapter实现ExpandableAdapter

SimpleExpandableListAdapter的构造函数
public SimpleExpandableListAdapter(Contextcontext,List<? extends Map

参数
1.context 与SimpleExpandableListAdapter关联的ExpandableListView的上下文。
2.groupData 一个Maps列表(List)。集合中的每个字典项与可折叠列表中的每个组元素一致。字典项提供了组元素包含的所有数据,并包含所有在"groupFrom"中指定的记录。
3.groupLayout 显示组元素的资源文件。该资源文件定义了如何显示组元素。该布局文件必须至少包括groupTo中所定义的View。(即groupTo中的View id数组必须都在该布局文件中找到)
4.groupFrom 一个键值列表。对应与组相关联的Map中的键值。
5.grouptTo 组View应当显示groupFrom参数中的所有列数据。这些数据应当都用TextView来显示。列表中的前N个View从前N个groupFrom参数获得列元素的数据。
6.childData 一个Map列表的列表。外部列表中的每个实体对应一个组(按照组的位置编号)。在内部列表的每个实体对应某个组的子元素(按照子元素的位置编号)。该 Map对应了子元素的数据(按照childFrom数组中的值编号)。该Map包含了每个子元素的数据,并且应当包括所有在childFrom中指定的 实体。
7.childLayout 显示子元素的资源文件。该资源文件定义了如何显示子元素。布局文件至少应该包括所有在childTo中定义的View。(即childTo中的view id数组必须都在该布局文件中找到)
8.childFrom 定义显示子元素的列名。该列名与childData中的子元素属性(字典键值)对应。
9.childTo 子View应当显示childFrom参数中的所有列数据。这些数据应当都用TextView来显示。列表中的前N个View从前N个childFrom参数获得列元素的数据。

定义布局文件,指定必要的属性

定义要显示的数据,分组的数据是个一维数组,子列表的数据是个二维数组
public String[] groupStrings = {“西游记”, “水浒传”, “三国演义”, “红楼梦”};
public String[][] childStrings = {
{“唐三藏”, “孙悟空”, “猪八戒”, “沙和尚”},
{“宋江”, “林冲”, “李逵”, “鲁智深”},
{“曹操”, “刘备”, “孙权”, “诸葛亮”, “周瑜”},
{“贾宝玉”, “林黛玉”, “薛宝钗”, “王熙凤”}
};

定义分组的视图和子选项的视图,这里就用最简单的 TextView,显示文字数据
下面是分组的视图,因为分组项左边要显示 Indicator 的缘故,所以这里加上了给 TextView 加上了内边距。子选项的视图也是一个 TextView,

自定义适配器,需要继承 BaseExpandableListAdapter 抽象类,重写相关的方法,代码中没贴出来的提供默认实现就好了。
// 获取分组的个数
@Override
public int getGroupCount() {
return groupStrings.length;
}

//        获取指定分组中的子选项的个数
@Override
public int getChildrenCount(int groupPosition) {
    return childStrings[groupPosition].length;
}

//        获取指定的分组数据
@Override
public Object getGroup(int groupPosition) {
    return groupStrings[groupPosition];
}

//        获取指定分组中的指定子选项数据
@Override
public Object getChild(int groupPosition, int childPosition) {
    return childStrings[groupPosition][childPosition];
}

//        获取指定分组的ID, 这个ID必须是唯一的
@Override
public long getGroupId(int groupPosition) {
    return groupPosition;
}

//        获取子选项的ID, 这个ID必须是唯一的
@Override
public long getChildId(int groupPosition, int childPosition) {
    return childPosition;
}

//        分组和子选项是否持有稳定的ID, 就是说底层数据的改变会不会影响到它们。
@Override
public boolean hasStableIds() {
    return true;
}
//        获取显示指定分组的视图
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
    GroupViewHolder groupViewHolder;
    if (convertView == null) {
        convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.item_expand_group, parent, false);
        groupViewHolder = new GroupViewHolder();
        groupViewHolder.tvTitle = (TextView) convertView.findViewById(R.id.label_expand_group);
        convertView.setTag(groupViewHolder);
    } else {
        groupViewHolder = (GroupViewHolder) convertView.getTag();
    }
    groupViewHolder.tvTitle.setText(groupStrings[groupPosition]);
    return convertView;
}

//        获取显示指定分组中的指定子选项的视图
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
    ChildViewHolder childViewHolder;
    if (convertView == null) {
        convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.item_expand_child, parent, false);
        childViewHolder = new ChildViewHolder();
        childViewHolder.tvTitle = (TextView) convertView.findViewById(R.id.label_expand_child);
        convertView.setTag(childViewHolder);
    } else {
        childViewHolder = (ChildViewHolder) convertView.getTag();
    }
    childViewHolder.tvTitle.setText(childStrings[groupPosition][childPosition]);
    return convertView;
}

//        指定位置上的子元素是否可选中
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
    return true;
} 

static class GroupViewHolder {
    TextView tvTitle;
}
static class ChildViewHolder {
    TextView tvTitle;

}

为 ExpandableListView 设置适配器
expandableListView.setAdapter(new MyExpandableListAdapter());

对于处理 Item 的点击事件,还是要设置监听器,常用的有这几类:
setOnChildClickListener
setOnGroupClickListener
setOnGroupCollapseListener
setOnGroupExpandListener

通过方法名我们就能知道各自的用途,它们分别设置单击子选项、单击分组项、分组合并、分组展开的监听器。
// 设置分组项的点击监听事件
expandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView expandableListView, View view, int i, long l) {
Toast.makeText(getApplicationContext(), groupStrings[i], Toast.LENGTH_SHORT).show();
// 请务必返回 false,否则分组不会展开
return false;
}
// 设置子选项点击监听事件
expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
Toast.makeText(getApplicationContext(), childStrings[groupPosition][childPosition], Toast.LENGTHshow();
return true;
}
});

Android ExpandableListView动态UI更新实践指南 本文还有配套的精品资源,点击获取 简介:ExpandableListView是Android中用于显示层次结构数据的强大组件。本篇详细介绍了如何通过自定义适配器操作子项内容,并提供了实时更新UI、事件监听、动画效果以及性能优化的方法。文章涵盖了创建数据模型、实现适配器、绑定数据、更新UI、监听事件、添加动画和性能优化等关键步骤,指导读者构建功能丰富的交互式列表,并优化用户体... 阅读详情

相关推荐

Android常用控件(能折叠的ListView)--ExpandableListView的使用模仿QQ好友

Android常用控件(能折叠的ListView)--ExpandableListView的使用模仿QQ好友

ExpandListView总结

from 花葬_小吃一口 小白一位,本文仅一些自己在学习路上的一些总结,请各路大佬觉得不是,或有可补充的地方,请帮忙修正。学生感激不尽(耐心看完哦,代码有几百行,这是我对于可折叠列表学习所有的理解,希望可以帮助到有需要的人。请看本篇文章的伙伴,对于adapter有一定的理解) 可折叠列表 总有一些客户需求列表可以折叠。一开始能想到的就是定义一个type然后来区分哪一块来显示什么。这里要介绍一下ExpandListView的方便之处啦!!! 如果对可折叠列表有存在疑惑的伙伴可以参考一个QQ的好友列表。可.

weixin_44351756的博客 807

仿QQ好友列表分组悬浮PinnedHeaderExpandableListView

仿QQ好友列表分组悬浮PinnedHeaderExpandableListView

学习Android的新的UI控件Material Design(六)——CollapsingToolbarLayout实现可折叠式标题栏(综合)

开发工具:Android Studio这篇文章是这个系列的一个总结,其中用到了前面的所有UI控件的知识,来实现一个图片,一个标题,和一个可以展开的文本信息,实现流畅的切换过程,具体的开发过程如下:首先和创建一个FruitActivity和activity_fruit.xml的布局具体代码如下:activity_fruit.xml代码&lt;?xml version="1.0" encoding="...

Y1182848976的博客 576

ExpandableListView实时更新UI数据

本来想添加图片但是没有找到怎么添加效果图,ExpandableListView中操作子项内容,更新数据并实时的显示到group中,应该说是实时刷新UI。

蓝牙6.0的‘新雷达’:Channel Sounding信道探测,真能比UWB更香吗?

本文探讨了蓝牙6.0的Channel Sounding信道探测技术在室内定位领域的应用潜力。通过与UWB技术的对比分析,揭示了其在成本、功耗和兼容性方面的优势,特别是在智能门锁、物品追踪等场景中的商业价值。Channel Sounding技术不仅具备亚米级精度,还能通过现有蓝牙设备实现零边际成本部署,为物联网应用提供了新的解决方案。

weixin_29288313的博客 333

Android UI设计——ExpandableListView控件

ExpandableListView  ExpandableListView是一种双层显示的View,为什么这么说呢,以我们的QQ为例,打开我们的QQ,我们首先会有一个联系人的分组,点击分组我们会看到分组内联系人的列表。这就是一种双层显示的View。ExpandableListView相当于两层的ListView嵌套。      ExpandableListView的使用与ListView类似,

To_be_Designer 1532

centos7下安装gcc-10.3.0

生成多个系统版本的代码,如果你的操作系统是32位,默认就已经设置为 disable,这时gcc仅能生成32位的可执行程序;这里只开启了c,c++ 和fortran,因为支持的语言越多,就需要安装越多的相应静态与动态库,还有五花八门的依赖库,这会让管理变得困难,体积也会变得庞大。启用posix标准的线程支持,这个设置取决于宿主或目标操作系统的类型,其它可用值有:aix,dec,solaris,win32等,如果你是其它的类UNIX系统,就需要设置相应的值。指定安装路径,这里没有指定,就直接放到文件夹里就好。

lxystar2003的博客 1189

android 界面分栏,Android UI控件ExpandableListView基本用法详解

ExpandableListView介绍ExpandableListView的引入ExpandableListView可以显示一个视图垂直滚动显示两级列表中的条目,这不同于列表视图(ListView)。ExpandableListView允许有两个层次:一级列表中有二级列表。比如在手机设置中,对于分类,有很好的效果。手机版QQ也是这样的效果。使用ExpandableListView的整体思路(1)...

weixin_39985842的博客 541

ANSYS Maxwell:从RMxprt到3D轴向磁通电机的无缝建模指南

本文详细介绍了如何利用ANSYS RMxprt作为高效起点,快速构建3D轴向磁通电机的有限元分析模型。通过RMxprt内置模板输入关键参数并完成磁路法计算后,可一键生成包含几何、材料、绕组及边界条件的即用型Maxwell 3D模型,极大简化了复杂三维结构的建模流程,使工程师能专注于性能优化与仿真分析。

weixin_29281941的博客 556

EFR32BG22 Thunderboard开发板 使用SPI 读取加速度计

Simplicity Studio v5 创建Silicon Labs蓝牙SoC EFR32BG22 Thunderboard模块的加速度计工程,模块上有一个ICM-20648 6轴运动跟踪设备,集成3轴加速度计和3轴陀螺仪功能,使用SPI接口跟EFR32BG22芯片连接。 我尽量以图片的形式展示(少打字): 将EFR32BG22的Thunderboard模块通过USB线插入到电脑,打开Simplicity Studio v5软件。 下面看重点: 点击搜索到的IO Stream: USART,点击Ins

qq_25727979的博客 1494

Android UI控件----ExpandableListView的基本用法

ExpandableListView介绍 ExpandableListView的引入 ExpandableListView可以显示一个视图垂直滚动显示两级列表中的条目,这不同于列表视图(ListView)。ExpandableListView允许有两个层次:一级列表中有二级列表。 比如在手机设置中,对于分类,有很好的效果。手机版QQ也是这样的效果。 使用ExpandableListView的整体...

weixin_34244102的博客 293

【信道编码/Channel Coding】线性分组码

这是本专栏信道编码/Channel Coding的第二站,想对信道编码有一个系统性的认识可以看本专栏的信道编码的整体框架一文。而在本篇文章中,将介绍线性分组码的基本原理。

Tomatomatodo的博客 9245

Android开发应用--高级UI界面设计

(要求:界面中包含两个ImageButton(图片按钮)和一个ImageSwitcher(图片切换器),图片按钮上的图片分别为向左的箭头和向右的箭头,单击按钮时,按钮图片会随着状态发生变化,同时图片也随之变化。(要求:页面包含两个按钮:按钮一和按钮二。熟悉了Android高级界面控件应用方法,掌握了Android应用程序界面的图片控件和列表控件的设计与应用方法,掌握了Android应用程序程序界面对话框和菜单的设计与操作方法。(3)掌握Android应用程序界面的图片控件和列表控件的设计与应用方法。

zdsxc_的博客 523

银河麒麟系统V10 sp1,安装wine 9.0

银河麒麟系统V10 sp1 x86_64,安装wine 9.0

daqinzl的专栏 1万+

1688店铺所有商品API接口(整店商品查询API接口)

1688店铺所有商品API接口、1688店铺列表API接口,1688店铺API接口,1688店铺查询商品API接口,1688店铺商品API接口,1688店铺详情接口,1688商品API接口

tbprice的博客 1569

Android ExpandableListView控件 刷新数据 记录

ExpandableListView ` **这个是自定义ExpandableListView 控件 解决 在 NestedScrollView 中ExpandableListView 不可滚动 ** /** * 只需要在自定义ExpandableListView重写这个方法即可 */ @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

xiaomeng_22的博客 844

香橙派5B-RK3588-NPU内核升级至0.9.8:RKLLM多模态部署实战

本文详细介绍了香橙派5B-RK3588设备NPU内核升级至0.9.8版本的完整流程,重点讲解了升级的必要性、两种升级方案(预编译包安装与自行编译内核)以及RKLLM SDK的安装配置。通过实战演示多模态模型转换与推理,显著提升AI计算性能,为嵌入式AI部署提供实用指南。

salt9的博客 1027

Android GridView等控件的属性集合

GridView的一些特殊属性:1.android:numColumns=”auto_fit” //GridView的列数设置为自动 2.android:columnWidth=”90dp ” //每列的宽度,也就是Item的宽度 3.android:stretchMode=”columnWidth”//缩放与列宽大小同步 4.android:verticalSpacing=”

Dxf_01的博客 997

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Android 基础总结(一)UI相关——下

一 Adapter基础讲解 本篇文章我们要讲的UI控件都是跟Adapter(适配器)打交道的,了解并学会使用这个Adapter很重要, Adapter是用来帮助填充数据的中间桥梁,简单点说就是:将各种数据以合适的形式显示到view上,提供 给用户看! 1.1 MVC模式的简单理解 在开始学习Adapter之前我们要来了解下这个MVC模式概念: 举个例子:大型的商业程序通常由多人一同开发完成,比如有人负责操作接口的规划与设计, 有人负责程序代码的编写如果要能够做到程序项目的分工就必须在程序的结构上做适合的安排

weixin_44058795的博客 584

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

android的 重要控件使用篇

google android开发参考:    http://developer.android.com/index.html 1)gridview:   http://www.cnblogs.com/salam/archive/2010/10/06/1844596.html http://blog.youkuaiyun.com/hellogv/article/details/4567095 ht

阿海的博客 1303

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

GridView Gallery Spinner AutoCompleteTextView和ExpandableListView

GridView numcolums显示的列数 spinner gallery gridview autocompleteTextview expandablelistview expandableadapter 两级分级界面

二锅头爱拉菲 508

[Android Studio]掌握Android Studio的五种常见控件和五种常见布局

目录一、View和ViewGroup二、Android的五种常见控件2.1 文本控件2.1.1 TextView2.1.2 EditText2.2 按钮控件2.2.1 Button2.2.2 RadioButton2.2.3 CheckBox2.3 图片控件2.3.1 ImageView2.4 列表控件2.4.1 ListView2.4.2 Spinner2.4.3 ExpandableListView2.5 时间日期控件2.5.1 AnalogClock(模拟时钟的显示方式)和DigitalClock2.

IT博客-wusheng_z 2万+

Android部分控件示例汇总

ListView http://blog.youkuaiyun.com/xys289187120/article/details/6636139   Dialog http://blog.youkuaiyun.com/xys289187120/article/details/6601613   XML解析 http://blog.youkuaiyun.com/smcwwh/article/details/7183869

我想跟代码谈谈 1446

好多好多Android的控件(不定时更新)

文章目录一、Toast提示 一、Toast提示 Toast(消息提示框)是轻量级信息提醒机制,显示在应用程序界面的最上层。一般用于提示一些不那么引人注目,但是又希望用户看见的消息,无需用户自己维护它的消失。 没有对应的控件 没有控制按钮 不会获得焦点 自动消失 用于显示快速提示信息 步骤 创建Toast对象 设置消息提示的样式 在Toast中显示图片:用imageview控件,添加一个im...

学海无涯乐作舟 256
上一篇: Android-UI控件-GridView
下一篇: Android-LinearLayout(线性布局)
Android_xi
博客等级 码龄8年 4粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值