首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一篇博客理解Recyclerview的使用

RecyclerView是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能,这一点从它的名字Recyclerview即回收view也可以看出...封装了viewholder的回收复用,也就是说RecyclerView标准化了ViewHolder,编写Adapter面向的是ViewHolder而不再是View了,复用的逻辑被封装了,写起来更加简单。...(holder.itemView, position); return true; } }); } } 最后附上项目完整代码: public class MainActivity...this.mDatas = datas; getRandomHeight(this.mDatas); } public interface onItemClickListener{ //条目被点击时触发的回调...void onOnItemClick(View view,int position); //长按时触发的回调 void onLongClick(View view,int position

84930

基于滑动场景解析RecyclerView的回收复用机制原理

举个例子说,在 setLayoutManager、setAdapter、notifyDataSetChanged 或者滑动时等等这些场景都会触发回收复用机制的工作。...但是如果只是 RecyclerView 滑动的场景触发的回收复用机制工作时,其实并不需要四级缓存都参与的。 emmm,应该讲得还是有点懵,那就继续看下去吧,会一点一点慢慢分析。...再次向上滑动重新显示第一行的5个卡位时,只有后面3个卡位触发了 onBindViewHolder() 方法,重新绑定数据呢?...也都是复用的,而且也只有后面3个卡位触发了 onBindViewHolder() 重新绑定数据; 红框3是第二次向下滑动时的日志,这次第四行的5个卡位,前3个的卡位用的 ViewHolder 是复用的...Q2: 在这个过程中,为什么当 RecyclerView 再次向上滑动重新显示第一行的5个卡位时,只有后面3个卡位触发了 onBindViewHolder() 方法,重新绑定数据呢?

3.1K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    浅谈RecyclerView的性能优化

    众所周知,RecyclerView拥有四级缓存,它们分别是: Scrap缓存:包括mAttachedScrap和mChangedScrap,又称屏内缓存,不参与滑动时的回收复用,只是用作临时保存的变量。...ViewCacheExtension:mViewCacheExtension又称拓展缓存,为开发者预留的缓存池,开发者可以自己拓展回收池,一般不会用到。...RecyclerView的回收原理 (1)如果是RecyclerView不滚动情况下缓存(比如删除item)、重新布局时。...因为Scrap缓存池不参与滚动的回收复用,所以CacheView缓存池被称为一级缓存,又因为ViewCacheExtension缓存池是给开发者定义的缓存池,一般不用到,所以RecycledViewPool...4.视情况使用setItemViewCacheSize(size)来加大CacheView缓存数目,用空间换取时间提高流畅度。

    2.1K10

    给中级Python开发者的13个练手项目,适合你不?

    本文将列出十三个适合中级 Python 开发人员练手的项目。 Web 项目设计 内容聚合器(Content Aggregator) 1. 技术细节 该项目设计的主要目标是聚合内容。...使用 Python 的标准 relibrary,就可以对输入的文本运行查询字符串。当查询字符串不匹配时,re 库将返回 None,当匹配时,将返回匹配的字符串。...这样,测验的创建者可以确定用户在测验中的每个问题上花多长时间。 同时拥有测验分享功能也很棒,这样用户可以在其他平台上与朋友分享有趣的测验。 GUI 项目设计 MP3 播放器 1....由于它是一个闹铃,应用程序必须在规定的时间播放音频。用于播放音频的库有 pygame 库等。 在代码逻辑中,应用程序必须不断检查设置的闹铃时间。到达时间后,它会触发一个播放闹钟铃声的功能。...如此一来,应用程序就会在每天或每周的特定时间发送通知,提醒用户们使用记账工具。 命令行项目设计 通讯录 1. 技术细节 该项目的主要目标是保存联系方式。

    1.1K30

    给中级Python开发者的13个练手项目,适合你不?

    本文将列出十三个适合中级 Python 开发人员练手的项目。 Web 项目设计 内容聚合器(Content Aggregator) 1. 技术细节 该项目设计的主要目标是聚合内容。...使用 Python 的标准 relibrary,就可以对输入的文本运行查询字符串。当查询字符串不匹配时,re 库将返回 None,当匹配时,将返回匹配的字符串。...这样,测验的创建者可以确定用户在测验中的每个问题上花多长时间。 同时拥有测验分享功能也很棒,这样用户可以在其他平台上与朋友分享有趣的测验。 GUI 项目设计 MP3 播放器 1....由于它是一个闹铃,应用程序必须在规定的时间播放音频。用于播放音频的库有 pygame 库等。 在代码逻辑中,应用程序必须不断检查设置的闹铃时间。到达时间后,它会触发一个播放闹钟铃声的功能。...如此一来,应用程序就会在每天或每周的特定时间发送通知,提醒用户们使用记账工具。 命令行项目设计 通讯录 1. 技术细节 该项目的主要目标是保存联系方式。

    1.2K20

    Android知识笔记:记录 2 个 “容易误解” 的Android 知识点

    答:事件先到DecorView Input系统 当用户触摸屏幕或者按键操作,首次触发的是硬件驱动,驱动收到事件后,将该相应事件写入到输入设备节点,这便产生了最原生态的内核事件。...我们先粗略地温习一下RecyclerView的回收机制: RecyclerView在布局(自然滑动其实也是反复布局子View)时,会回收一些符合条件的ViewHolder,它会根据ViewHolder的状态来决定临时存放在哪个地方...,且把这些临时存放ViewHolder的集合看作两种: 不需要经过onBindViewHolder能直接重用的(mAttachedScrap、mCachedViews); 需要经过onBindViewHolder...被回调时,ViewHolder并没有真正被回收!...Adapter中有个onViewRecycled方法,看名字就知道是当Item被回收后回调的。。。

    98720

    RecyclerView 必知必会

    RecyclerView的回收机制有个重要的概念,即将回收站分为Scrap Heap和Recycle Pool,其中Scrap Heap的元素可以被直接复用,而不需要调用onBindViewHolder...这个问题的描述是:当Item视图中有图片和文字,当更新文字并调用notifyItemChanged()时,文字改变的同时图片会闪一下。...,但我认为根本没有必要费这么大劲对外暴露这个接口,因为我们完全可以把点击事件的实现写在Adapter的onBindViewHolder()中,不暴露出来。...那么如何在不破坏原有Adapter实现的情况下完成呢? 这里引入装饰器(Decorator)设计模式,该设计模式通过组合的方式,在不破话原有类代码的情况下,对原有类的功能进行扩展。...RecyclerView局部刷新的实现原理也是基于RecyclerView的回收机制,即能直接复用的ViewHolder就不调用onBindViewHolder()。

    3K70

    给中级Python开发者的13个练手项目,适合你不?

    Web 项目设计 内容聚合器(Content Aggregator) 1. 技术细节 该项目设计的主要目标是聚合内容。首先,我们需要知道内容聚合器从哪些站点获取内容。...使用 Python 的标准 relibrary,就可以对输入的文本运行查询字符串。当查询字符串不匹配时,re 库将返回 None,当匹配时,将返回匹配的字符串。...这样,测验的创建者可以确定用户在测验中的每个问题上花多长时间。 同时拥有测验分享功能也很棒,这样用户可以在其他平台上与朋友分享有趣的测验。 GUI 项目设计 MP3 播放器 1....由于它是一个闹铃,应用程序必须在规定的时间播放音频。用于播放音频的库有 pygame 库等。 在代码逻辑中,应用程序必须不断检查设置的闹铃时间。到达时间后,它会触发一个播放闹钟铃声的功能。...如此一来,应用程序就会在每天或每周的特定时间发送通知,提醒用户们使用记账工具。 命令行项目设计 通讯录 1. 技术细节 该项目的主要目标是保存联系方式。

    1.4K40

    Android RecyclerView八个必会的面试技巧

    引言 在Android开发领域,RecyclerView是一项强大的工具,用于处理大量数据的高效显示。熟练掌握RecyclerView的知识对于一名Android开发者来说至关重要。...参考简答:RecyclerView相较于ListView的优势在于: 灵活性: RecyclerView通过定制化的布局管理器、适配器和动画效果,允许开发者更灵活地定制列表布局和外观。...使用notifyItemInserted和notifyItemRemoved触发动画:在数据集合发生变化时,通过这两个方法触发自定义Animator的执行。...Recycler池中维护了一个可回收的ViewHolder队列,通过这个池来快速获取可重用的ViewHolder。...这种机制大大提高了RecyclerView的性能。 结语 RecyclerView作为Android开发的重要组件,其灵活性和性能优势使得它在实际项目中得到广泛应用。

    56220

    偷懒新姿势,打造属于RecyclerView的万能适配器Adapter和ViewHolder

    前言 昨天开始接触江湖口碑很好的RecyclerView,事实上,我已经被她的强大所征服了!资源回收,数据绑定,布局显示,分割线,Item动画多个模块高度解耦,灵活优雅。...因此我们发现,这个adapter的核心代码在与onBindViewHolder()中,作用是将数据跟视图(ViewHolder)绑定,可以给子类提供一个bindData()抽象方法。...RecyclerView强制我们使用ViewHolder模式,然而缺不可避免地要写findViewById代码,有没有办法不写这样的代码呢?甚至连ViewHolder都不写呢?当然可以!...private T findViewById(int viewId),核心成员变量是private SparseArray mViews; 不信可以不写一句ViewHolder代码?...完整项目代码已上传至Github(https://github.com/TellH/RecyclerViewDemo)。

    1.5K60

    Android开发之漫漫长途 XV——RecyclerView

    RecyclerView还有许多优势,这里就不一一列举了,总体来说现在越来越多的项目使用RecyclerView,许多老旧项目也渐渐使用RecyclerView来替代ListView。...(这个大小指的是高度,宽度) 那么接着onDraw()以及onDrawOver(),两者的作用是什么呢以及两者之间有什么关系呢?...本篇的解决办法与上面的并无本质上的不同,只是我们在Adapter的外面再包上一层,以类似装饰者设计模式的方式对Adapter进行无侵入式的包装。...RecyclerView的缓存机制 RecyclerView和ListView的回收机制非常相似,但是ListView是以View作为单位进行回收,RecyclerView是以ViewHolder作为单位进行回收...视图将被丢弃到给定的回收器中(即参数recycler)。 *回收器(即Recycler)可能更喜欢重用scrap的视图。

    2.4K20

    RecyclerView的那点事儿

    mDivider = a.getDrawable(0); // 回收TypedArray所占用的空间 a.recycle(); setOrientation..., 在Item的布局中 采用layout_margin的方式 * * 主要是动态设置View的高度 adapter类中的 onBindViewHolder */ public class StaggeredGridLayuoutAct...// 单击事件 void onItemClick(View view ,int position); // 长按触发的事件 void onItemLongClick...()中的v.getTag()方法,这需要在onBindViewHolder()方法中设置和item相关的数据 @Override public void onBindViewHolder(ViewHolder...中,典型的观察者模式,有点绕的地方在于,这里涉及到两个观察者模式的使用,view的setOnClickListener本来就是观察者模式,我们将这个观察者模式的事件监听传递给了我们自己的观察者模式。

    2.1K30

    图解浏览器

    这是一道十分常见的面试题,不过大多数人回答这个问题时都不够系统和全面,可见这道题能够充分考察应试者的知识深度。 我画了一张图整理了浏览器的导航渲染流程,下面我们来一起查缺补漏。...然后使用标记 - 清除算法进行垃圾回收,不过回收后会产生大量不连续的内存碎片。...在上图中,有一个元素在一帧中占据了视口的一半。然后,在下一帧中,元素下移视口高度的 25%。...距离分数是任何不稳定元素在框架中(水平或垂直)移动的最大距离除以视口的最大尺寸(宽度或高度,以较大者为准)。...在上图中,最大视口尺寸是高度,不稳定元素已经移动了视口高度的 25%,所以距离分数是 0.25。

    1.7K30

    Kotlin入门(23)适配器的进阶表达

    前面在介绍列表视图和网格视图时,它们的适配器代码都存在视图持有者ViewHolder,因为Android对列表类视图提供了回收机制,如果某些列表项在屏幕上看不到了,则系统会自动回收相应的视图对象。...随着用户的下拉或者上拉手势,已经被回收的列表项要重新加载到界面上,倘若每次加载都得从头创建视图对象,势必增加了系统的资源开销。...视图持有者的设计理念固然美好,却苦了Android开发者,每次由BaseAdapter派生新的适配器类,都必须手工处理视图持有者的相关逻辑,实在是个沉重的负担。...有鉴于此,循环视图的适配器把视图持有者的重用逻辑剥离出来,由系统自行判断并处理持有者的重用操作。...、onCreateViewHolder、onBindViewHolder三个方法,以及视图持有者的类定义 class RecyclerGridAdapter(context: Context, private

    2.1K41
    领券