首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Android从零单排系列二十一】《Android视图控件——ExpandableListView》

ExpandableListView可以展示带有分组和子项的层次结构数据,让用户可以方便地通过展开和折叠操作来浏览和查看更多的内容。...适配器为每个分组和子项提供数据,并负责渲染它们的视图。 分组和子项布局:你可以定义自己的分组项布局和子项布局,包括文本、图像和其他UI元素的组合。通过适配器,将数据绑定到各个视图上。...分组展开与折叠:用户可以点击分组项来展开或折叠子项。这样可以在有限的空间内显示大量的分组和子项,提供更好的用户体验。 点击事件处理:可以为分组项和子项设置点击事件监听器,以响应用户的点击操作。.../> 准备数据源:为 ExpandableListView 提供分组项和子项的数据。...childList.get(childPosition) : null; } // 其他方法... } 在代码中设置适配器和监听器: // 获取 ExpandableListView

51010

Android开发笔记(一百)折叠式列表

动态列表直接使用ListView,动态内容就得自己写个控件了,自定义控件的难点在于如何把握动态下拉和收起的动画。...如果一开始每条动态默认显示四行,那么默认显示高度是getLineHeight*4,使用setHeight方法即可设置动态的初始显示高度。...下面是ExpandableListAdapter经常要重写的几个方法: getGroupCount : 获取分组的个数。 getChildrenCount : 获取子项的个数。...getGroupView : 获取指定分组的视图。 getChildView : 获取指定子项的视图。 isChildSelectable : 判断子项是否允许选择。...setOnChildClickListener,并重写onChildClick方法; 3、子项目中若有Button、EditText等默认占用焦点的控件,要去除焦点占用,即setFocusable和setFocusableInTouchMode

2.2K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    A022-列表容器之ExpandableListView

    概述 本节课介绍Android中可实现二级可展开收缩列表的ExpandableListView容器,笔者感觉它非常难用并且难理解,很多时候我们可能需要对控件进行扩展和定制,然而它不太方便扩展,它使用难点主要在数据结构上和对控件的事件监听...上面实现的效果可展开的二级列表,每个组项都可能有若干个子项,默认的ExpandableListView不太美观,我们需要通过自定义布局类美化它,在使用过程中有一些需要我们去了解的点,会在实现过程提一下。...(获取子项个数) getGroup(获取组对象) getChild(获取子对象) getGroupId(获取组项id) getChildId(获取子项id) hasStableIds(组和子元素是否持有稳定的...除了一个组项,每个组项下面有若干个子项,我们在使用的时候首先要确定要展示的数据结构,组项有groupPosition来标识位置,然而子项需要根据groupPosition和ChildPosition来标识位置...,我们设置数据的时候分别在getGroupView和getChildView方法来设置组视图和子项视图数据,最后返回填充数据的视图对象,一些逻辑控制的代码也是在这两个方法中进行,比如控制组项的展开、组项的点击

    92410

    ExpandableListView实例

    大家好,又见面了,我是你们的朋友全栈君。 先来看效果图: demo中有三个group item和多个child item,group item包括一个指示器,一个标题和一个按钮。...right" android:background="@drawable/btn_bg_menu" /> 2 由于每一个child子项中的图片和标题都不一样...该组ID必须在组中是唯一的.必须不同于其他所有ID(分组及子项目的ID) */ @Override public long getChildId(int groupPosition, int...ID.该组ID必须在组中是唯一的.必须不同于其他所有ID(分组及子项目的ID) */ @Override public long getGroupId(int groupPosition...添加了上下文菜单,长按group或者child的某一项都能弹出上下文菜单,另外,在group和child中,都添加了一个 这样的按钮,本来是打算,点击group中的此按钮弹出和长按group时弹出一样的上下文菜单

    1.4K20

    干货,仿qq列表,手把手实现分类悬浮提示

    今天抽时间,整理了下代码,记录一下使用过程,以便有类似的需求的时候可以快速搞定。 废话不多说,我们直接看代码和使用方法。...一 项目结构 项目结构.PNG 上边儿三个类分别是我们的自定义ExpandableListView,主界面,以及ExpandableListView使用的Adapter。...下边儿几个xml文件分别是主界面布局,指示器布局,ExpandableListView子项布局,ExpandableListView组布局。...,可以看到我们在构造方法中传入了上下文对象,种类,数据,以及我们的CustomExpandListview对象,所以在CustomExpandListview 中我们要添加相应的构造方法。...实现图中的效果是非常容易的,这个demo的全部代码在https://github.com/SolveBugs/ExpandableListviewDemo , 欢迎下载,主要的实现在MyAdapter和

    75930

    工具栏,底部导航栏,可扩展列表视图

    5.0使用Actionbar来实现,很多公司都会对该类进行定制,使用起来更加灵活。5.0之后使用Toolbar来取代之前的Actionbar,这个更加强大。...常用属性和方法: app:title setTitle(参数) 设置应用程序主题 app:subtitle setSubtitle(参数) 设置小标题 app:navigation setNavigation...2.1 BottomNavigationView类 用到了Fragment的知识,每个item都有一个icon和一个title组成,单击控制状态即可。...通话(电话) 通信录 设置 3.可扩展列表视图 一般用于数据的展开和折叠这种场景,即可以单独展开的列表视图。 ExpandableListView,是ListView的子类。...本质上是一个AdapterView,既然是AdapterView,在显示数据的时候,就需要使用到适配器。

    10110

    Android之微信朋友圈UI实现--ExpandableListView+GridView

    PS:我们都知道微信,更是知道朋友圈,很多人在朋友圈里卖起了化妆品,打入广告等为自己做一下推广,里面会附带一写好看的图片,上面有标题,有描述,整体布局每场的美观,那么这是怎么实现的呢,有些人可能会单个使用...ListView,也会使用GridView,那么listview嵌套gridview你使用过吗,现在先看一张图, ?...步骤: 总布局的创建,里面只要一个ExpandableListView控件。 ExpandableListView的item布局创建,本布局用最传统的做法分为Group和Child布局。...Group布局只显示一个用户名 Child布局就要为描述内容和GridView(存放图片)。 ExpandableListView适配器创建。 数据加载。..." android:id="@+id/id_elv"/> 2:ExpandableListView的item布局创建,本布局用最传统的做法分为Group和Child布局 2.1:这个就比较多了文件

    1.3K30

    Gradle 深度刨析

    一个项目基本上是一个Task对象的集合。...此范围包括Project实现类声明的属性的getter和setter。例如,getRootProject()可作为rootProject的属性访问方式。...此范围的属性是可读或可写的,存在对相应 getter 和 setter 方法。 项目的额外属性。每个项目都维护一个额外属性的映射,可以包含任意 名称 - >值 对。...额外属性 所有额外的属性必须通过“ext”命名空间进行定义。一旦额外的属性被定义,它可以直接在所有的对象(在下面的情况下分别是项目,任务和子项目)可用,并且可以被读取和更新。...插件可以通过项目的Convention对象向项目添加属性和方法。 5. 项目的任务。为每个任务添加一个方法,使用任务的名称作为方法名称并获取单个闭包或Action参数。

    85110

    安卓ExpandableListView的详细使用教程(附代码解析过程)

    二、实现步骤 使用ExpandableListView主要有三个步骤: 编写父布局 编写子布局 适配器的书写 1.编写父布局parent.xml   父布局其实很简单,就是两个并排的TextView,用于展示课程名字和分数...的Adapter都要继承BaseExpandableListAdapter这个类,并且必须重载getGroupView和getChildView这两个最为重要的方法。...public Object getChild(int i, int j) { return null; } @Override //获取指定分组的...} public void setTeacher(String teacher) { this.teacher = teacher; } } 里面包含设置和获取每种信息的方法...getGroupView和getChildView两个方法我举getGroupView来详细讲解: public View getGroupView(int i, boolean b, View convertView

    1.2K20

    【译】Spring Boot 配置绑定

    理论上,只有 setter 也能提供足够的信息,但单一属性只有在 getter 和 setter 都存在时才会在元数据中暴露。...基于数组的绑定 基于数组的绑定必需有 setter 方法。 基于 Map 的绑定 对于集合,可以通过使用括号表示法或使用 导航点(navigation dot) 来指定键,从而向映射中添加任意值。...("Acme street") 提示:如果中间关系为 null,将使用默认构造函数创建一个新实例,并使用相关的 setter 方法进行调用。...总结 下表描述了关于是否需要 getter/setter 的规则: 绑定类型 Getter Setter 示例 简单绑定 技术上非必需 必需 foo.name=myName 集合绑定 必需 若集合已初始化则非必需...解决这个问题的一种方法是升级 IDE 支持,以便它可以在存在时实时获取该文档,而不仅仅依赖于元数据。

    13310

    基础篇-ObjectC继承、类别、属性

    2)类别支持开发人员针对自己构建的类,把相关的方法分组到多个单独的文件中,对于大型而复杂的类,这有助于提高可维护性,并简化单个源文件的管理。 对于以下情况,无法使用类别,必须使用继承。...继承的好处: (1)抽取出了重复的代码 (2)建立了类和类之间的联系 继承的缺点:耦合性太强 属性 在OC中定义变量,可以自己来定义变量的setter方法来设置变量值,用getter方法来获取变量值...,但是当变量数量增多时,还采用手动添加setter/getter方法来操作变量,就会使得程序代码量大大增加,于是就出现了 @property 来快速声明设置获取变量的值的方法,这也许就是  @property...(通过类别和runtime 的对相关联技术生成新的属性时,无法使用这个这个设置,只能使用@dynamic) 编译器期间,让编译器自动生成getter/setter方法。...setter和getter的改进优化: 可以看到,getter器的方法名直接就是变量名,方法名和变量名一样,容易让人迷糊,所以,可以这样优化。

    1.9K10

    一个list 里面存放实体类,根据多个字段进行分组,最后将结果都保存,返回一个map 集合,一层一层的map 集合

    getter/setter,请根据实际情况进行实现 // ... } 在修改后的代码中,我们使用Collectors.collectingAndThen方法来在最后一层分组的数据上进行计算。...calculateValue方法接收一个最后一层的列表数据,并根据实际需求进行计算,并返回计算结果。这样,最终的分组结果将包含计算结果的Map集合。...如果在最后一层,需要传另外的参数 如果calculateValue方法需要接收一个最后一层的列表数据和一个额外的字符串变量,你可以将该变量添加到方法的参数列表中,并在Collectors.collectingAndThen...} // 获取数据列表的示例方法,请根据实际情况进行实现 private static List getDataList()...getter/setter,请根据实际情况进行实现 // ... } 在修改后的代码中,calculateValue方法的参数列表中添加了一个String类型的额外参数extraParameter

    70410

    Dart中的封装

    如何在Dart中实现封装 **Dart 不支持 public、private 和 protected 等关键字。Dart 使用  _ (下划线)将属性或方法设为私有。封装发生在库级别,而不是类级别。...使用下划线(_) 将类属性声明为私有。 提供公共的getter 和 setter方法来访问和更新私有属性的值。...3. getter 和 setter Getter 和 setter 方法用于访问和更新私有属性的值. Getter 方法用于访问 私有属性 的值。 Setter 方法用于更新 私有属性 的值。...提供了一个名为celsius的getter方法,用于获取当前对象的摄氏度值。 提供了一个名为celsius的setter方法,允许设置当前对象的摄氏度值。...Dart中的封装实现: 使用下划线(_)前缀来标识私有属性或方法。 提供公共的getter和setter方法来控制私有属性的访问和修改。

    7610
    领券