一文搞懂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
猜你喜欢
- 一、是什么当下很多公司都采取前后端分离的开发模式,前端和后端的工作由不同的工程师完成。在这种开发模式下,维持一份及时更新且完整的 Rest
- 说明:曾经在网上看过花样繁多的分页,很多都号称如何通用,但很多时候往往不尽如人意:有在分页类中还加入URL地址信息的,有在分页类中还进行分页
- 近几年移动互联网的高速发展,智能手机的使用用户呈现 * 性增长,手机终端上的App 种类繁多,大多数App 都需要与后台系统进行交互,交互的第
- 前言List接口是Collection接口的三大接口之一,其中的数据可以通过位置检索,用户可以在指定位置插入数据。List的数据可以为空,可
- 问题描述:在用fabric集成后编译出现如下错误,Error:Cause: hostname in certificate didn'
- eclipse 创建 user library 方法1、Window - Preferences - Java - Build Path -
- Class.forName(xxx.xx.xx) 返回的是一个类一.首先你要明白在java里面任何class都要装载在虚拟机上才能运行。1.
- 在阎宏博士的《JAVA与模式》一书中开头是这样描述责任链(Chain of Responsibility)模式的:责任链模式是一种对象的行为
- Java IO BufferedInputStream概要:BufferedInputStream是缓冲输入流,继承于Filte
- 前言Elasticsearch是一个非常流行的搜索引擎,已经成为了许多企业的首选解决方案。然而,我们要想成为一个优秀的程序员,就必须掌握各种
- 这篇文章主要介绍了java读取xml配置参数代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友
- 前言Android12 有很多令人惊喜的变化,比如基于 Material You 的全新 UI,基于 SplashScreen 的应用启动画
- public class TestSqlserverJtds { public static void main(String[]
- 今天没事跟群里面侃大山,有个哥们说道Android Wheel这个控件,以为是Andriod内置的控件,google一把,发现是个githu
- 配置AOPAOP简介要介绍面向切面变成(Aspect-Oriented Programming,AOP),需要先考虑一个这样的场景:公司有一
- 在开发应用程序的时候,经常会遇到这样的情况,会在运行时动态根据条件来决定显示哪个View或某个布局。那么最通常的想法就是把可能用到的View
- SpringBoot2底层注解一、@ImportResource@Conditional注解,是根据条件进行装配。满足了 Condition
- 需求:接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承实体类(concrete class)?抽象类中是否
- 写在前面“The origin server did not find a current representation for the t
- 前言Hello!上一期我大致讲解了关于Collection单列集合以及它的子接口List集合的概述、特点和遍历等,今天我为大家讲解关于Col