Android 万能的RecyclerView适配器(BaseRecyclerViewAdapterHelper)

引用:

implementation "io.github.cymchad:BaseRecyclerViewAdapterHelper4:4.1.2"

BaseQuickAdapter

基本使用:

  • 快速使用

    class TestAdapter : BaseQuickAdapter<Status, TestAdapter.VH>() {// 自定义ViewHolder类class VH(parent: ViewGroup,val binding: LayoutAnimationBinding = LayoutAnimationBinding.inflate(LayoutInflater.from(parent.context), parent, false),) : RecyclerView.ViewHolder(binding.root)override fun onCreateViewHolder(context: Context, parent: ViewGroup, viewType: Int): VH {// 返回一个 ViewHolderreturn VH(parent)}override fun onBindViewHolder(holder: VH, position: Int, item: Status?) {// 设置item数据}}
  • 如果Adapter特别简单,可以使用BuickViewHolder

    class TestAdapter : BaseQuickAdapter<Status, QuickViewHolder>() {override fun onCreateViewHolder(context: Context, parent: ViewGroup, viewType: Int): QuickViewHolder {// 返回一个 ViewHolderreturn QuickViewHolder(R.layout.layout_animation, parent)}override fun onBindViewHolder(holder: QuickViewHolder, position: Int, item: Status?) {// 设置item数据holder.getView(R.id.xxxx)}}

点击事件:

  • item 点击事件

    adapter.setOnItemClickListener { adapter, view, position ->Tips.show("onItemClick $position")
    }
    
  • item 长按事件

    adapter.setOnItemLongClickListener { adapter, view, position ->Tips.show("onItemLongClick $position")true
    }
    
  • item 子控件点击事件

    // 需要传递控件 id
    adapter.addOnItemChildClickListener(R.id.iv_num_add) { adapter, view, position ->Tips.show("onItemChildClick:  add $position")
    }
    
  • item 子控件长按事件

    // 需要传递控件 id
    adapter.addOnItemChildLongClickListener(R.id.btn_long) { adapter, view, position ->Tips.show("onItemChildLongClick $position")true
    }
    

点击事件(扩展)

  • 去除点击抖动(双击)的点击方法。 默认500毫秒间隔,可以传递参数修改。

      // item 去除点击抖动的扩展方法adapter.setOnDebouncedItemClick { adapter, view, position ->}// item Child 去除点击抖动的扩展方法adapter.addOnDebouncedChildClick { adapter, view, position ->}

数据操作

  • 设置数据集合

    adapter.submitList(list)
  • 修改某一位置的数据

    //修改index为1处的数据
    adapter[1] = data
  • 新增数据

    // 尾部新增数据
    adapter.add(data)// 在指定位置添加一条新数据
    adapter.add(1, data)// 添加数据集
    adapter.addAll(list)// 指定位置添加数据集
    adapter.addAll(1, list)
  • 删除数据

    // 删除数据
    adapter.remove(data)// 删除指定位置数据
    adapter.removeAt(1)
  • 交换数据位置(仅仅是这两个数据的位置交换)

    // 交换两个位置的数据
    adapter.swap(1, 3)
  • 移动数据位置(注意和 swap 的区别)

    // 交换两个位置的数据
    adapter.move(1, 3)
  • 获取Item数据的索引

    // 如果返回 -1,表示不存在
    adapter.itemIndexOfFirst(data)
  • 根据索引,获取Item数据

    // 如果返回 null,表示没有数据
    adapter.getItem(1)

动画

  • 内部内置了5种默认动画:

    /**
    * BaseQuickAdapter.AnimationType.AlphaIn
    * BaseQuickAdapter.AnimationType.ScaleIn
    * BaseQuickAdapter.AnimationType.SlideInBottom
    * BaseQuickAdapter.AnimationType.SlideInLeft
    * BaseQuickAdapter.AnimationType.SlideInRight
    */
    adapter.setItemAnimation(BaseQuickAdapter.AnimationType.AlphaIn)
  • 自定义动画 需继承 ItemAnimator 实现自定义动画

    class CustomAnimation1 : ItemAnimator {override fun animator(view: View): Animator {// 创建三个动画val alpha: Animator = ObjectAnimator.ofFloat(view, "alpha", 0f, 1f)val scaleY: Animator = ObjectAnimator.ofFloat(view, "scaleY", 1.3f, 1f)val scaleX: Animator = ObjectAnimator.ofFloat(view, "scaleX", 1.3f, 1f)scaleY.interpolator = DecelerateInterpolator()scaleX.interpolator = DecelerateInterpolator()// 多个动画组合,可以使用 AnimatorSet 包装val animatorSet = AnimatorSet()animatorSet.duration = 350animatorSet.play(alpha).with(scaleX).with(scaleY)return animatorSet}
    }// 设置动画
    adapter.itemAnimation = CustomAnimation1()
  • 重写动画执行操作

    class TestAdapter : BaseQuickAdapter<Status, QuickViewHolder>() {...override fun startItemAnimator(anim: Animator, holder: RecyclerView.ViewHolder) {}
    }
  • 是否打开动画

    adapter.animationEnable = true

更多Adapter

更多Adapter
 

项目地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/588107.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

亲爱的程序猿们,元旦快乐!

新年祝福 在这个充满欢笑和祝福的日子里&#xff0c;我想对你们说&#xff1a; 新的一年&#xff0c;愿你们像代码一样充满逻辑&#xff0c;像算法一样追求高效&#xff0c;像编程语言一样多样化&#xff01; 2024年即将到来&#xff0c;预测几个行业趋势&#xff1a; 人工…

【回溯】0-1背包Python实现

文章目录 [toc]问题描述形式化描述 回溯法时间复杂性Python实现 个人主页&#xff1a;丷从心 系列专栏&#xff1a;回溯法 问题描述 给定 n n n种物品和一背包&#xff0c;物品 i i i的重量是 w i w_{i} wi​&#xff0c;其价值为 v i v_{i} vi​&#xff0c;背包的容量为 c …

Qt基础之四十五:Qt国际化(I18N)

国际化的英文表述为Internationalization,通常简写为I18N(首尾字母加中间的字符数),这种奇葩的缩写方式,让我想起了NBA球星“字母哥”。 下面看下Qt实现的动态语言切换效果。 一.效果 二.源码 QHSettingDialog.h #ifndef QHSETTINGDIALOG_H #define QHSETTINGDIALOG_H#…

Redis(认识NoSQL,认识redis,安装redis,redis桌面客户端,redis常见命令,redis的Java客户端)

文章目录 Redis快速入门1.初识Redis1.1.认识NoSQL1.1.1.结构化与非结构化1.1.2.关联和非关联1.1.3.查询方式1.1.4.事务1.1.5.总结 1.2.认识Redis1.3.安装Redis1.3.1.依赖库1.3.2.上传安装包并解压1.3.3.启动1.3.4.默认启动1.3.5.指定配置启动1.3.6.开机自启 1.4.Redis桌面客户端…

【数据结构】详细剖析线性表

顺序表与链表的比较 导言一、线性表二、线性表的存储结构三、顺序表和链表的相同点四、顺序表与链表之间的差异五、存储结构的选择六、静态顺序表的基本操作七、无头结点单链表的基本操作结语 导言 大家好&#xff0c;很高兴又和大家见面啦&#xff01;&#xff01;&#xff0…

轻量应用服务器与云服务器CVM对比——腾讯云

腾讯云轻量服务器和云服务器CVM该怎么选&#xff1f;不差钱选云服务器CVM&#xff0c;追求性价比选择轻量应用服务器&#xff0c;轻量真优惠呀&#xff0c;活动 https://curl.qcloud.com/oRMoSucP 轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三…

液晶时钟设计

#include<reg51.h> //包含单片机寄存器的头文件 #include<stdlib.h> //包含随机函数rand()的定义文件 #include<intrins.h> //包含_nop_()函数定义的头文件 sbit RSP2^0; //寄存器选择位&#xff0c;将RS位定义为P2.0引脚 sbit RWP2^1; //读写选…

UEFI模拟环境搭建——windows+EDKII

目录 0 说明 1 安装软件 1.1 VS2019的安装 1.2 Python的安装 1.3 IASL的安装 1.4 NASM的安装 1.5 git的下载 2 EDKII的下载 3 配置环境 0 说明 个人感觉UEFI的环境搭建非常复杂&#xff0c;在经过很长一段折磨后&#xff0c;终于还是搭建成功&#xff0c;写下来记录一…

ctfshow——文件上传

文章目录 文件上传思路web 151web 152web 153知识点解题 web 154web 155web 156web 157web 158web 159web160web 161 文件上传思路 web 151 打开页面显示&#xff1a;前台校验不可靠。说明这题是前端验证。 右键查看源代码&#xff0c;找到与上传点有关的前端代码&#xff1a…

软件测试/测试开发丨Linux进阶命令(curl、jq)

1、 curl 接口请求 curl是一个发起请求数据给服务器的工具curl支持的协议FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP和RTSPcurl是一个非交互的工具 2、 curl 发起 get 请求 -G&#xff1a;使用get请求-d&#xf…

还不会STL???【C++】标准模板库(STL):万字长文,不看后悔,适合小白,快速上手,函数全盘点!

文章目录 STL 是什么01 vector 动态数组1.1介绍1.2方法函数1.3 访问1.3.1 下标访问1.3.2 迭代器访问1.3.3 智能指针 02 stack 栈2.1 介绍2.2 方法函数2.3 栈遍历2.3.1 栈遍历2.3.2 数组模拟栈进行遍历 03 queue 队列3.1 介绍3.2 方法函数3.3 队列模拟 04 deque 双端队列4.1 介绍…

电子邮件地址填写指南:格式与常见问题解答

一个专业的电子邮件地址是一个你只用于工作目的的通信帐户。当你给收件人发送电子邮件时&#xff0c;这是他们最先看到的细节之一。无论你的职位或行业如何&#xff0c;拥有一个专业的电子邮件地址都可以提高你和所在公司的可信度。 在本文中我们解释了专业的电子邮件地址是什么…

2023-12-22 LeetCode每日一题(得到山形数组的最少删除次数)

2023-12-22每日一题 一、题目编号 1671. 得到山形数组的最少删除次数二、题目链接 点击跳转到题目位置 三、题目描述 我们定义 arr 是 山形数组 当且仅当它满足&#xff1a; arr.length > 3存在某个下标 i &#xff08;从 0 开始&#xff09; 满足 0 < i < arr.…

HTTPS面试题

HTTPS面试题 什么是HTTPS&#xff1f;它与HTTP有何不同&#xff1f; 答案&#xff1a;HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是一种通过加密和认证保护数据传输安全的HTTP协议。它使用SSL&#xff08;Secure Sockets Layer&#xff09;或TLS&#x…

Zookeeper-Zookeeper应用场景实战(二)

1. Zookeeper 分布式锁实战 1.1 什么是分布式锁 在单体的应用开发场景中涉及并发同步的时候&#xff0c;大家往往采用Synchronized&#xff08;同步&#xff09;或者其他同一个 JVM内Lock机制来解决多线程间的同步问题。在分布式集群工作的开发场景中&#xff0c;就需要 一种…

2024年【安全员-A证】考试内容及安全员-A证最新解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全员-A证考试内容参考答案及安全员-A证考试试题解析是安全生产模拟考试一点通题库老师及安全员-A证操作证已考过的学员汇总&#xff0c;相对有效帮助安全员-A证最新解析学员顺利通过考试。 1、【多选题】下列关于门…

配置yum镜像源

文章目录 前言一、配置yum源1.清除本地配置2.挂载镜像3.新增本地源配置4.加载本地yum源&测试 总结 前言 在内网环境的时候&#xff0c;yum无法正常连接互联网安装软件&#xff0c;这时候我们可以挂载系统镜像文件来下载。 一、配置yum源 1.清除本地配置 cp -rf /etc/yum…

2023年12月个人工作生活总结

本文为 2023 年 12 月工作生活总结。 研发编码 Sqlite3数据库已有表添加字段 需求&#xff1a;某工程因需要在数据库已有表添加一新字段&#xff0c;不影响原有结构。关键代码&#xff1a; 添加表名&#xff1a; ALTER TABLE <表名> ADD COLUMN <新字段> INTEGE…

DS|串应用

问题一&#xff1a;DS串应用 -- KMP算法 题目描述&#xff1a; 学习KMP算法&#xff0c;给出主串和模式串&#xff0c;求模式串在主串的位置 输入要求&#xff1a; 第一个输入t&#xff0c;表示有t个实例 第二行输入第1个实例的主串&#xff0c;第三行输入第1个实例的模式…

RHCE9学习指南 第13章 硬盘管理

新的硬盘首先需要对硬盘进行分区和格式化&#xff0c;首先了解一下硬盘的结构&#xff0c;如图13-1所示。 图13-1 磁盘上的磁道和扇区 硬盘的磁盘上有一个个的圈&#xff0c;每两个圈组成一个磁道。从中间往外发射线&#xff0c;把每个磁道分成一个个的扇区&#xff0c;每个扇…