一文搞懂Android RecyclerView点击展开、折叠效果的实现代码

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"

为什么呢?
如果设置了固定尺寸 他是没有那种折叠效果的 会占的空间比较大 数据多少 排版很难看

以上就是Android RecyclerView点击展开、折叠效果的实现方式的详细内容,更多关于Android RecyclerView点击展开折叠的资料请关注我们其它相关文章!

(0)

相关推荐

  • 使用RecyclerView实现瀑布流高度自适应

    使用RecyclerView实现的瀑布流高度自适应,供大家参考,具体内容如下 背景:使用时在RecyclerView外嵌套了自定义的ScrollView,需要让RecyclerView高度自适应,由于是瀑布流格式网上找了好多方法都无法实现或是动态计算的高度不准确.估计大家都知道recyclerview 内容的高度不是 recyclerview 控制的而是由LayoutManager 来设置的.下面我来说下我的解决方案吧: 布局中的使用 <android.support.v7.widget.Rec

  • Android入门教程之RecyclerView的具体使用详解

    目录 RecyclerView 的基本用法 横向滚动 RecyclerView 点击事件 RecyclerView 的基本用法 和我们之前学习的控件不一样,RecyclerView 属于新增控件,所以我们需要在项目的 build.gradle 中添加 RecyclerView 库的依赖,才能使用该控件 dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementa

  • RecyclerView使用payload实现局部刷新

    本文实例为大家分享了RecyclerView使用payload实现局部刷新的具体代码,供大家参考,具体内容如下 列表局部刷新: 01.notifyDataSetChanged() 刷新全部可见的item 02.notifyItemChanged(int position) 更新列表position位置上的数据可以调用 03.notifyItemInserted(int position) 列表position位置添加一条数据时可以调用,伴有动画效果 04.notifyItemRemoved(in

  • Android自定义RecyclerView Item头部悬浮吸顶

    本文实例为大家分享了Android自定义RecyclerView Item头部悬浮吸顶的具体代码,供大家参考,具体内容如下 概述 1.自定义了一个FrameLayout,引入条目的头部布局加入到自定义FrameLayout中. 2.将RecyclerView加入FrameLayout 3.条目头部View的Alpha动画以及设置透明和不透明这个时机大多是通过打log来确定的,硬推理还是有些难. 4.当屏幕显示区域的第二条Item距离控件顶端的距离小于条目头部View高度时,就开始移动条目头部Vi

  • Android recyclerview实现纵向虚线时间轴的示例代码

    效果图 代码 package com.jh.timelinedemo; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.DashPathEffect; import android.graphics.Paint; import android.util.AttributeSet; import

  • 一文搞懂Android RecyclerView点击展开、折叠效果的实现代码

    RecyclerView是什么 RecycleView是Android5.0后谷歌推出的一个用于在有限的窗口中展示大量数据集的控件,位于support-v7包中.它可以实现与ListView和GridView一样的效果,提供了一种插拔式的体验,高度的解耦,异常的灵活,只需设置其提供的不同的LayoutManager,ItemAnimator和ItemDecoration,就能实现不同的效果. RecyclerView的优点 1.支持局部刷新.    2.可以自定义item增删时的动画.    3

  • js实现点击展开隐藏效果(实例代码)

    本章给大家介绍用js事件冒泡实现鼠标点击显示提示框效果(代码实例).有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 先看看效果图: 代码实例: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>事件冒泡-提示框</title> </head> <style> button { width: 160px; h

  • 教你一文搞懂Kotlin中的Jvm注解

    JvmOverloads 创建一个kotlin的类 class Student(val name: String, val sex: Int = 1, val age: Int = 18) 可以看出来 这个构造函数的参数是有默认值的,kotlin的特性对吧,我们在使用的时候可以方便的使用,比如: val student = Student("wuyue") val student2 = Student("wuyue", age = 18) 但是这个特性如果你用jav

  • 一文搞懂如何部署启动多个tomcat并移植项目

    目录 部署tomcat 一.下载解压 二.修改配置文件 移植项目 一.打包原项目 二.复制到tomcat 三.访问试试 有时候我们在编写web项目时,有好几个项目需要同时运行,但直接放置war包总会出各种问题,比如说同一个Tomcat 同一个端口 部署多个项目,或者同一个Tomcat 多个端口 部署多个项目,经过几番测试决定分享给大家,jdk的安装就不多讲了,配好环境变量就可以,下面给大家介绍详细操作流程: 部署tomcat 一.下载解压 官网下载tomcat,并解压 二.修改配置文件 打开co

  • 一文搞懂TypeScript的安装、使用、自动编译的教程

    1. 初识 TypeScript 上篇文章给大家介绍过TypeScript的安装.使用.自动编译的实现  需要的朋友点击查看. TypeScript 的介绍 TypeScript 是一种由微软开发的开源.跨平台的编程语言.它是 JavaScript 的超集,最终会被编译为 JavaScript 代码. 2012 年 10 月,微软发布了首个公开版本的 TypeScript,2013 年 6 月 19 日,在经历了一个预览版之后微软正式发布了正式版 TypeScript TypeScript 的作

  • 一文搞懂JMeter engine中HashTree的配置问题

    目录 一.前言 二.HashTree的用法 三.JMeter源码导出jmx脚本文件介绍 四.自定义HashTree生成JMeter脚本 一.前言 之前介绍了JMeter engine启动原理,但是里面涉及到HashTree这个类结构没有给大家详细介绍,这边文章就详细介绍JMeter engine里面的HashTree结构具体用来做什么 大家看到下面是JMeter控制台配置截图,是一个标准的菜单形式:菜单形式其实就类似于"树型"的数据结构,而HashTree其实就是一个树型数据结构 我们

  • 一文搞懂Codec2框架解析

    目录 1 前言–Codec2.0是什么 2 Codec2.0框架 3 流程解析 3.1 初始化流程 3.2 启动流程 3.3 Input Buffer的回调 3.4 Output Buffer的回调 4 总结 1 前言–Codec2.0是什么 在Android Q之前,Android的两套多媒体框架分别为MediaPlayer与MediaCodec,后者只负责解码与渲染工作,解封装工作由MediaExtractor代劳,MediaCodec经由ACodec层调用第三方编解码标准接口OpenMAX

  • 一文搞懂Codec2解码组件

    目录 1 前言 2 组件的创建 3 组件接口 4 组件运行原理 5 小结 1 前言 在本篇中,我们将关注Codec 2.0以下几个问题: 1.从顶而下,一个解码组件是如何创建的 2.组件的接口有哪些,分别是什么含义 3.组件是如何运行的,输入与输出的数据流是怎样的 2 组件的创建 CCodec在allocate中,通过CreateComponentByName创建了具体的解码组件. //android/frameworks/av/media/codec2/sfplguin/CCodec.cpp

  • 一文搞懂如何避免JavaScript内存泄漏

    目录 一.什么是内存泄漏 二.常见的内存泄漏 1.意外的全局变量 2. 计时器 3. 闭包 4. 事件监听器 5.缓存 6.分离的DOM元素 三.识别内存泄漏 1.使用性能分析器可视化内存消耗 2. 识别分离的 DOM 节点 大家好,我是CUGGZ.SPA(单页应用程序)的兴起,促使我们更加关注与内存相关的 JavaScript 编码实践.如果应用使用的内存越来越多,就会严重影响性能,甚至导致浏览器的崩溃.下面就来看看JavaScript中常见的内存泄漏以及如何避免内存泄漏. 一.什么是内存泄漏

  • 一文搞懂Vue3.2中setup语法糖使用

    目录 前言 一.如何使用setup语法糖 二.data数据的使用 三.method方法的使用 四.watchEffect的使用 五.watch的使用 六.computed计算属性的使用 七.props父子传值的使用 八.emit子父传值的使用 九.获取子组件ref变量和defineExpose暴露 十.路由useRoute和useRouter的使用 十一.store仓库的使用 十二.await 的支持 十三.provide 和 inject 祖孙传值 前言 提示:Vue3.2 版本开始才能使用语

随机推荐