一文搞懂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的复用,而且回收机制更加完善。

实现效果

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

思路

我使用的是第三方适配器BaseRecyclerViewAdapterHelper

但是遇到一个问题
这个适配器2.0和3.0不兼容 而2.0版本 没有折叠效果这个组件 我用3.0版本 gradle一直依赖不了
怎么办?

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

只能寻找其他方法来实现 我想到的是在用两层 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

标签:Android,RecyclerView,展开,折叠
0
投稿

猜你喜欢

  • 在Android app中实现九(n)宫格图片连续滑动效果

    2022-10-14 21:09:23
  • Java开发之内部类对象的创建及hook机制分析

    2023-11-27 04:45:20
  • 一篇文章轻松搞懂Java中的自旋锁

    2023-06-29 00:00:36
  • Android中自定义标题栏样式的两种方法

    2022-05-03 09:06:01
  • C#设计模式之Facade外观模式解决天河城购物问题示例

    2023-06-10 08:28:36
  • Spring Cloud 使用 Resilience4j 实现服务熔断的方法

    2021-11-09 12:36:10
  • Windows下Flutter+Idea环境搭建及配置

    2022-01-22 18:12:13
  • java 中HashCode重复的可能性

    2021-09-13 17:38:05
  • Android7.0版本影响开发的改进分析

    2022-06-06 03:40:37
  • 深入讲解java线程与synchronized关键字

    2023-08-29 13:56:00
  • MyBatisPlus 大数据量查询慢的问题解决

    2022-06-17 05:56:39
  • Android开发实现的ViewPager引导页功能(动态加载指示器)详解

    2021-10-16 17:40:35
  • java与scala数组及集合的基本操作对比

    2022-03-03 05:52:27
  • Java contains用法示例

    2023-01-12 19:48:34
  • c# 通过经纬度查询 具体的地址和区域名称

    2023-08-15 11:41:53
  • Java建造者设计模式详解

    2022-09-19 13:14:11
  • JavaWeb如何实现禁用浏览器缓存

    2021-09-13 01:27:45
  • Android自定义View之组合控件实现类似电商app顶部栏

    2023-07-26 22:14:10
  • Java面向对象程序设计:抽象类,接口用法实例分析

    2023-03-08 23:56:07
  • MyBatis中resultType和parameterType和resultMap使用总结

    2023-04-01 05:43:42
  • asp之家 软件编程 m.aspxhome.com