RecyclerView使用详解

RecyclerView使用解析 0.RecyclerView的特性 1.LayoutManager类 2.Adapter类 3.ViewHolder类 4.配置不同的LayoutManager 5.为item配置点击事件 6.RecyclerView中插入和删除数据 . . . 0.RecyclerView的特性: 灵活可以配置 可以自定义并且可以重复使用的Item 高度解耦 . . 1.LayoutManager类: La... 阅读详情

RecyclerView是Android 5.x版本中新添加的一个全新控件,他比ListView,GridView更加的灵活,我们能够使用RecyclerView就完成ListView,GridView所做的工作,同时使用RecyclerView也能非常方便的实现瀑布流的效果。

一.竖屏ListView,横屏GridView效果

MainActivity代码:


首先获取到手机屏幕的宽高,如果width<height,那就展示一个ListView,如果width>height,那就展示一个4列的GridView。

MyRecyclerViewAdapter代码:


由于RecyclerView并没有像ListView一样给每个Item设置点击监听事件,所以我们需要自己实现对RecyclerView的点击监听。实现的方法可以是在我们的MyRecyclerViewAdapter中去为点击事件提供一个回调。

DividerItemDecoration代码(为ListView添加分割线):


DividerGridItemDecoration代码(为GridView添加分割线):


RecyclerView本身并不支持divider属性,所以如果我们不做定制,RecyclerView的每个Item之间是不会有分割线的,但是我们可以通过addItemDecoration()来定制自己的分割线,addItemDecoration()接收的参数是个ItemDecoration对象,我们可以自定义一个DividerItemDecoration类继承自ItemDecoration,在这个类中完成分割线的定制。

二.实现瀑布流效果

StaggeredGridActivity代码:


StaggeredGridAdapter代码:


其实瀑布流的实现和GridView的实现基本一致,只是瀑布流的每个Item的高不一样,所以这里在Adapter中动态的设置每个Item的高,在onBindViewHolder()中我们用到了LayoutParams方法,这里需要注意的是LayoutParams有很多不同的包,导包的时候一定要导对应的包。不然会报类型不匹配的错误。

三.添加、删除Item

1.删除:


2.添加:


设置动画:


四.点击监听(onClick,onLongClick)

如何实现RecyclerView的点击事件在上面的代码已经给出,上面的代码中如果是点击,则显示一条Toast,如果是长按则删除对应的Item。

点击事件处理中遇到的2个问题:

1.长按删除后也会显示非长按点击的Toast:

原因:一开始在setOnLongClickListener中返回了false,这样这个点击事件还会在向下传递,就会传递到setClickListener中,如果返回了true,则代表这次点击事件在setOnLongClickListener中就被消费了,不会再往下传递。(个人理解,有待验证...)可以参考下之前的文章 

OnTouch事件ACTION_DOWN,ACTION_MOVE,ACTION_UP的事件拦截

解决:setOnLongClickListener中return true。

2.长按删除后出现数据错乱:

原因:在StaggeredGridAdapter的removeItem()方法中,我们对Item的删除使用了notifyItemRemoved(int position)方法,这是RecyclerView为我们提供的带动画的删除方法,但是这个方法只是删除了界面上的Item,为保持数据的一致,我们还需要删除数据源中对应的数据,即dataList.remove(position)。如果对Item的删除仅仅这样处理的话,你会发现再去做删除操作时会发生数据的错乱,导致这个的原因是,我们在做完删除处理后并没有对RecyclerView进行刷新,所以会导致RecyclerView显示的数据与数据源不一致。

解决:解决这个问题的办法就是在删除数据后我们就对RecyclerView刷新一次。RecyclerView和ListView一样,有notifyDataSetChanged()方法,但是使用这个方法进行刷新我们就无法看到删除动画了,原因是调用notifyDataSetChanged()刷新屏幕上显示的所有item的话,必然也会刷新当前正在执行动画的那个Item,这样导致的结果是前面的动画还没执行完,它马上又被刷新了,动画就看不见了。这里我们可以用notifyItemRangeChanged(int position, int itemCount())方法,只需要从被删除的Item后面开始刷新就可以了,这样就保持了原有的删除动画。







Android RecyclerView使用详解(含通过网络请求得到数据) RecyclerView是Android中非常受欢迎的控件,RecyclerView是官方在Android5.0之后新添加的控件,推出用来替代传统的ListView和GridView列表控件,所以如果你还在使用ListView的话可以替换为RecyclerView了。对于RecyclerView的使用根据实际项目进行说明,一些功能可能是你现在正在做的,对你有帮助也说不定。 阅读详情

相关推荐

RecyclerView的简单用法

RecyclerView的简单用法

qq_47338645的博客 1932

RecyclerView的使用+相关问题

ViewHolder是RecyclerView中的一个重要概念,它主要用于缓存item中的控件,避免重复获取和findViewById,从而提高RecyclerView的性能。在RecyclerView中,每个item都是一个ViewHolder,它包含了item中的所有控件。当RecyclerView需要显示一个新的item时,它会调用Adapter的onCreateViewHolder方法创建一个新的ViewHolder,并将item中的控件保存在ViewHolder中。

star_nwe的博客 3434

RecyclerView系列:RecyclerView嵌套RecyclerView(BaseRecyclerViewAdapterHelper实现)

看效果图: 先导入依赖包: 导入BaseRecyclerViewAdapterHelper和RecyclerView 把RecyclerView整到布局activity_main.xml中去。 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.and

知道这个有什么用? 4337

RecyclerView的使用

自定义点击事件,完成实现对RecyclerView的点击监听。

qq_64353584的博客 2925

Android RecyclerView基本使用详解

什么是RecyclerView 关于RecyclerView,是一个主要用于展示和回收View的有一个控件,在官用了一句话来概括 RecyclerView 是一种通过提供有限的数据项窗口有效显示大数据集的视图。 基提供几个基本的功能, 控制其显示的方式 ———>LayoutManager—(必需) 控制Item间的间隔 ———>ItemDecoration—-(非必需) 控制Item增删的动画——->ItemAnimator——(非必需) 以上就可以完成ListView大部的功能了,但是确缺少了一个很常用的功能,就是Item的点需事件。当然,这个并不是什么问题,上文也说了,RecyclerV

大模型事件抽取学习——论文学习笔记《LLMs Learn Task Heuristics from Demonstrations:......》

本篇博客介绍一篇发表在2024 ACL main上的文章:《LLMs Learn Task Heuristics from Demonstrations: A Heuristic-Driven Prompting Strategy for Document-Level Event Argument Extraction》 方向:大模型事件抽取 本篇博客为个人阅读论文的总结与笔记,在这里进行简单的分享 论文链接:https://arxiv.org/abs/

weixin_53751318的博客 1850

Android RecyclerView最全使用详解

本文目录RecyclerView概述RecyclerView使用-基础篇第一步:添加RecyclerView第二步:添加布局文件第三步:添加逻辑代码运行效果RecyclerView使用-进阶篇布局管理器线性布局管理器网格布局管理器ItemDecorationItem 动画Item 点击RecyclerView使用-高级篇(上拉刷新下拉加载更多)第一步:添加依赖第二步:布局文件第三步:逻辑代码完整代...

lucashu的博客 9万+

Windows 10 下 Nacos 3.0.2 单机版保姆级安装教程(含JDK 17配置与MySQL 8.0连接避坑)

本文提供Windows 10下Nacos 3.0.2单机版的详细安装教程,涵盖JDK 17配置、MySQL 8.0连接优化及生产级安全设置。通过步骤详解和常见问题解决方案,帮助开发者快速完成Nacos的安装与配置,确保服务发现与配置管理的高效运行。

weixin_29237635的博客 319

RecyclerView详解

RecyclerView 简称 RV, 是作为 ListView 和 GridView 的加强版出现的,目的是在有限的屏幕之上展示大量的内容,因此 RecyclerView 的复用机制的实现是它的一个核心部分。 RV 常规使用方式如下: 解释说明。 setLayoutManager:必选项,设置 RV 的布局管理器,决定 RV 的显示风格。常用的有线性布局管理器(LinearLayoutManager)、网格布局管理器(GridLayoutManager)、瀑布流布局管理器(StaggeredGr

Android 4万+

城市规划师必备:ArcMap里用这个免费工具,5步完成建筑群通风廊道分析

本文介绍了城市规划中利用ArcMap进行建筑群通风廊道分析的高效方法,重点讲解了迎风面投影指数(FAI)的应用。通过5个步骤,从数据准备到规划应用,帮助规划师快速评估城市通风潜力,优化建筑布局,提升城市风环境质量。

weixin_26800111的博客 412

ESP32系列之LVGL(四):输入设备(外部按键)对接

本文详细介绍了如何在ESP32上使用LVGL库对接外部按键作为输入设备,包括硬件连接、驱动层实现和LVGL输入设备移植。通过具体代码示例和实战案例,帮助开发者快速实现按键控制UI界面,解决常见问题如按键无反应和控件跳转不正常。

weixin_30907935的博客 241

RecyclerView如何嵌套RecyclerView

Linearlayoutmanager RecyclerView嵌套GridLayoutManager RecyclerView 布局方式:以一个GridLayoutManager的recyclerview作为Linearlayoutmanager RecyclerView的itemview MainRecyclerAdapter.java public class MainRecyclerAdapter extends RecyclerView.Adapter<MainRecyclerAdap

Jonly_W的博客 2845

Aruba CX交换机VSX配置实战:如何避免脑裂导致的网络中断(含详细命令)

本文提供Aruba CX交换机VSX配置的实战指南,重点讲解如何通过构建高可靠的ISL链路聚合与独立隔离的Keepalive链路,有效避免网络脑裂风险。文章包含详细的命令步骤,从基础配置到高级故障排查,帮助网络工程师构建坚如磐石的高可用核心网络,确保业务流量零中断。

weixin_29231725的博客 170

Android RecyclerView 的使用详解

一、前言 可以这样说,RecyclerView 的问世,替代了 ListView 和 GridView。RecyclerView 异常的灵活、可自定义并可重复利用的 Item 、高度的解耦,并且通过设置不同的 LayoutManager、ItemDecoration 和 ItemAnimator 可以实现令人瞠目的效果。 ItemDecoration 的相关讲解大家可以看 这篇文章。 源码已经上传至 github,地址在文末中已经给出,可以先下载到本地运行起来,因为具体事例讲解的时候并没有把全部的代码贴出来

weixin_38478780的博客 1507

避坑指南:SpringBoot对接拉卡拉支付常见问题与解决方案(含SDK 1.0.6配置技巧)

本文是一份SpringBoot项目对接拉卡拉支付的实战避坑指南。针对SDK 1.0.6版本,详细剖析了从依赖管理、多环境配置、SDK初始化到支付请求构建、回调验签及生产监控的全流程常见问题,并提供了经过验证的解决方案与配置技巧,旨在帮助开发者高效、稳定地集成支付功能。

k5l6m的博客 330

告别混乱!用Cadence Capture CIS高效管理你的原理图库:以单逻辑器件K9F2G08U0M为例

本文以单逻辑器件K9F2G08U0M为例,详细介绍了如何使用Cadence Capture CIS高效管理原理图库。通过三级分类体系、工程化命名规范和智能检索技术,帮助工程师实现从混乱到有序的转变,提升团队协作效率和设计准确性。

aizhi0169的博客 400

RecyclerView(二)—— RecyclerView的使用

RecyclerView ListView由于强大的功能,在过去的Android开发当中可以说是贡献卓越,直到今天仍然还有不计其数的程序在使用ListView。不过ListView并不是完美无缺的,比如如果不使用一些技巧来提升它的运行效率,那么ListView的性能就会非常差。还有,ListView的扩展性也不够好, 它只能实现数据纵向滚动的效果,如果我们想实现横向滚动的话,ListView是做不到的。 为此,Android提供了一个更强大的滚动控件——RecyclerView。它可以说是一个增强版的Lis

xingyu19911016的博客 1938

基于深度学习的水质预测:多参数监测与预测

首先,我们需要收集水质监测的多参数数据。收集到的数据应包括不同时间点的水质参数值以及相应的水质等级标签,用于训练和评估深度学习模型。同时,数据的质量和数量对于模型的性能也有重要影响,因此在实际应用中需要充分考虑数据的采集和处理过程。总之,基于深度学习的水质预测可以通过收集水质监测的多参数数据并使用适当的深度学习模型进行训练和预测来实现。通过以上的深度学习模型,我们可以利用水质监测的多参数数据进行水质预测。这种基于深度学习的方法可以提高水质预测的准确性和稳定性,为水质监测和环境保护提供有力支持。

web_bug407的博客 1102

RecyclerView使用详解(三)

在上一篇(RecyclerView使用详解(二))文章中介绍了RecyclerView的多Item布局实现,接下来要来讲讲RecyclerView的Cursor实现,相较于之前的实现,Cursor有更多的使用场景,也更加的常用,特别是配合LoaderManager和CursorLoader进行数据的缓存及加载显示,基于此我们来重点看看RecyclerView的CursorAdapter具体要怎么实

nangongyanya的专栏 1591

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

RecyclerView的使用详解

RecyclerView的使用 RecyclerView的Adapter: 1.item的重用无需关心; 2.强制要求实现一个ViewHolder; 创建一个类(MyAdapter)继承于RecyclerView.Adapter; 定义一个ViewHolder; 搭建基础Adapter: public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyHolder> { private Context mContext;

weixin_43610758的博客 2261

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Recyclerview 嵌套Recyclerview

一  首先写主Recycler的逻辑:  (这里用的是BaseFragment ,大家可以忽视里面的一些重载方法 ,直接在onCreateView里面写) public class FavouriteFragment extends BaseFragment { @BindView(recyclerview) RecyclerView mRecyclerv

凯文欧巴的IT全攻略 635

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

在项目中使用RecyclerView详解

使用步骤 1.创建RecyclerView xml⾥⾯配置 2.代码中配置属性 确定样式 layoutManager 确定数据源 数据源最好是在adapter中设置 3.定义⼀个类实现RecyclerView.Adapter接⼝ RecyclerView就是通过接⼝⾥⾯的⽅法来访问数据的 a. 创建⼀个类继承于RecyclerView.ViewHolder 重复利⽤ b. 重...

zjcoming 290

Android中RecyclerView嵌套RecyclerView

前言这两天在做一个新的APP,在考虑用户体验上要一个两级的列表嵌套,于就想看看RecyclerView是否能做出这样的效果,自己写了一个DEMO来做一下测试,最后的效果还是比较满意的。下...

Vaccae的博客 1696

RecyclerView详解一,使用及缓存机制

RecyclerView详解系列一,介绍RecyclerView的由来,使用及其缓存机制

m0_51276753的博客 7268
上一篇: 使用RecyclerView报错:ClassNotFoundException android.support.v4.util.ArrayMap
下一篇: Volley框架使用报错:NetworkDispatcher.run: Unhandled exception java.lang.NullPointerException
AndroidShuai
博客等级 码龄12年 2粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值