一文搞懂Android RecyclerView点击展开、折叠效果的实现代码
作者:吕氏春秋i 发布时间:2023-02-17 14:52:24
RecyclerView是什么
RecycleView是Android5.0后谷歌推出的一个用于在有限的窗口中展示大量数据集的控件,位于support-v7包中。它可以实现与ListView和GridView一样的效果,提供了一种插拔式的体验,高度的解耦,异常的灵活,只需设置其提供的不同的LayoutManager,ItemAnimator和ItemDecoration,就能实现不同的效果。
RecyclerView的优点
1、支持局部刷新。
2、可以自定义item增删时的动画。
3、能够实现item拖拽和侧滑删除等功能。
4、默认已实现View的复用,而且回收机制更加完善。
实现效果
思路
我使用的是第三方适配器BaseRecyclerViewAdapterHelper
但是遇到一个问题
这个适配器2.0和3.0不兼容 而2.0版本 没有折叠效果这个组件 我用3.0版本 gradle一直依赖不了
怎么办?
只能寻找其他方法来实现 我想到的是在用两层 RecyclerView
的办法
在第一次的item布局里嵌套第二次RecyclerView
觉得可行 就开始写代码 最终结果还可以优化 就是上面的样子 实现了点击折叠和展开的效果
代码
代码实现比较简单
唯一要说的就是通过一个Flag
来更改折叠状态
在第一层的adapter
中可以设置一个标记位
//默认是关闭
private boolean isOpen = false;
public boolean isOpen() {
return isOpen;
}
public void setOpen(boolean open) {
isOpen = open;
}
然后在 convert
方法中 来切换数据的状态
if (isOpen) {
mRecyclerView.setVisibility(View.VISIBLE);
linearLayout.setVisibility(View.VISIBLE);
view.setBackgroundResource(R.mipmap.icon_more_than_open);
} else {
mRecyclerView.setVisibility(View.GONE);
linearLayout.setVisibility(View.GONE);
view.setBackgroundResource(R.mipmap.icon_more_than);
}
最后在数据展示的那个页面 调用Adapter里的折叠方法
mAdapter.setOnItemClickListener((adapter, view, position) -> {
if (mAdapter.isOpen()) {
mAdapter.setOpen(false);
} else {
mAdapter.setOpen(true);
}
//这个是渲染数据后 刷新 不然看不到数据
mAdapter.notifyDataSetChanged();
});
最后提示
adapter里的布局 建议设置成 wrap_content
android:layout_width="match_parent"
android:layout_height="wrap_content"
为什么呢?
如果设置了固定尺寸 他是没有那种折叠效果的 会占的空间比较大 数据多少 排版很难看
来源:https://blog.csdn.net/Life_s/article/details/118150917


猜你喜欢
- java金钱处理方法实例详解在支付行业中,涉及到对金钱的处理比较多。比如分转化成元、费率计算、手续费计算等等。1.分转化成元/** &nb
- 调用Bmob第三方服务器实现短信验证的功能,大致思路如下:随机产生6位数字,然后调用Bmob的请求短发函数发送者六位数到服务器,然后服务器给
- 难点是泛型如何转换一、arrayList<Map<String, Object>>转化json字符串,存入redis
- 在后台工程师开发完新代码交给QA进行测试时,软件测试人员一般都会要求后台开发对单元测试的覆盖率达到一定的标准;例如我们的标准是分支覆盖率达到
- we can custom min heap or max heap by override the method compare.pack
- 重新指定分配默认值的参数时,可以显式地为指定参数名称赋值,隐式指定的时候,是根据方法参数的顺序,靠c#编译器的推断。 代码示例: void
- 大部分的 Java 软件开发都会使用到各种不同的库。近日我们从一万个开源的 Java 项目中进行分析,从中提取出最常用的 Java 类,这些
- 本文实例为大家分享了Android实现接近传感器的具体代码,供大家参考,具体内容如下1.接近传感器检测物体与听筒(手机)的距离,单位是厘米。
- java 获取字节码文件的几种方法总结在本文中,以Person类为例,将分别演示获取该类字节码文件的三种方式,其具体思想及代码如下所示:pu
- 思路:首先进入登录界面,输入账号和密码后登陆到主界面,在主界面通过点击按钮发送一条强制下线的广播,广播接收者收到广播后重新进入登陆界面。新建
- 前言Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expe
- 本文实例讲述了java编程调用存储过程中得到新增记录id号的实现方法。分享给大家供大家参考,具体如下:关于ms sql server2000
- FeignClient脱离eureka自定义URL需求Spring Cloud环境中的FeignClient有时候需要调用特定主机的接口,但
- 本文实例讲述了Java使用桥接模式实现开关和电灯照明功能。分享给大家供大家参考,具体如下:一、模式定义桥接模式,也称桥梁模式,在软件系统中,
- 方法一:Hashtable ht = new Hashtable();  
- 拖曳小球WPF的拖曳效果,基本配置一下,就可以了,但是自绘的话,就得自己控制,按键点击,按键移动和按键松开的事件,与其配合达到目的。这个效果
- Java中数组初始化和OC其实是一样的,分为动态初始化和静态初始化,动态初始化:指定长度,由系统给出初始化值静态初始化:给出初始化值,由系统
- 集成引入依赖在项目的pom.xml中增加以下依赖<dependency> <groupId>org.s
- 本文实例讲述了C#查找字符串所有排列组合的方法。分享给大家供大家参考。具体实现方法如下:// 1. remove first char //
- 构造方法以及参数:PageView可用于Widget的整屏滑动切换,如当代常用的短视频APP中的上下滑动切换的功能,也可用于横向页面的切换,