RecyclerView -- 中阶

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 阅读详情

BRVAH使用

多布局

  1. 实体类实现MultiItemEntity 接口,根据类型进行绑定;
  2. 为 BaseQuickAdapter 设置代理。

标题

SnapHelper
Support RecyclerView 24.2.0中新加,让RecyclerView滑动视图后使停止位置正好停在某页的正中间。

new LinearSnapHelper().attachToRecyclerView(recyclerView);

数据刷新
dataList.clear(); //去掉之前的数据。要在原数据对象基础上。
dataList.add(weather); //添加新的Weather对象
mAdapter.notifyDataSetChanged();

重点内容
刷新全部可见的item,notifyDataSetChanged()
刷新指定item,notifyItemChanged(int)
从指定位置开始刷新指定个item,notifyItemRangeChanged(int,int)
插入、移动一个并自动刷新,notifyItemInserted(int)、notifyItemMoved(int)、notifyItemRemoved(int)
局部刷新,notifyItemChanged(int, Object)

优化

使用合适的刷新方法

数据需要全局刷新时,可以使用notifyDataSetChanged;对于增加或减少数据,可以使用如下方法实现局部刷新。

notifyItemChanged(int position)
notifyItemInserted(int position)
notifyItemRemoved(int position)
notifyItemMoved(int fromPosition, int toPosition) 
notifyItemRangeChanged(int positionStart, int itemCount)
notifyItemRangeInserted(int positionStart, int itemCount) 
notifyItemRangeRemoved(int positionStart, int itemCount) 

嵌套时设置共享itemView对象池

class OuterAdapter extends RecyclerView.Adapter<OuterAdapter.ViewHolder> {
    RecyclerView.RecycledViewPool mSharedPool = new RecyclerView.RecycledViewPool();

    ...

    @Override
    public void onCreateViewHolder(ViewGroup parent, int viewType) {
        // inflate inner item, find innerRecyclerView by ID…
        LinearLayoutManager innerLLM = new LinearLayoutManager(parent.getContext(),
                LinearLayoutManager.HORIZONTAL);
        innerRv.setLayoutManager(innerLLM);
        innerRv.setRecycledViewPool(mSharedPool);
        return new OuterAdapter.ViewHolder(innerRv);

    }

嵌套时增加预加载

如果默认显示3个,设置LayoutManager.setInitialPrefetchItemCount(4),让默认加载4个,系统默认是2个。

减少view type的数量

创建不同的view type需要额外的inflate调用导致卡顿。尽量减少type数量。

onBindViewHolder(VH, int)不做耗时操作

在此方法中尽量只做读取数据,并设置ViewHolder。
不要做:逻辑判断;减少临时对象创建;

优化Item布局

减少布局嵌套。

使用单个监听器

全局new一个Listener,通过view.getId与view.getTag取到对应View的id和数据,避免对每个新创建的Viewholder都new出一个监听器。

值相同避免再次刷新

更新数据前,先判断是否相同?不相同再更新内容。

固定了Item的高度

避免每次绘制Item时,不再重新计算Item高度。

解析

比ListView优点

  1. RecyclerView比ListView多两级缓存,支持多个离ItemView缓存,支持开发者自定义缓存处理逻辑;
  2. 支持所有RecyclerView共用同一个RecyclerViewPool(缓存池)。
  3. RecyclerView缓存RecyclerView.ViewHolder,抽象可理解为:View + ViewHolder(避免每次createView时调用findViewById) + flag(标识状态);
  4. 通过局部刷新,就能避免调用许多无用的bindView.

标题

重点内容

理解RecyclerView(五)—RecyclerView的绘制流程 前言:做人如果没有梦想,那和咸鱼有什么区别。        ——《少林足球》 一、概述   上一篇文章对RecyclerView中实现了如何高度自定义点击事件、万能ViewHolder、万能适配器的封装和使用。最开始就提到,RecyclerView支持各种各样的布局效果,其核心关键在于RecyclerView.LayoutManager中,使用时我们是需要setLayoutManager()设置布局管理器的。RecyclerView已经将一部分功能抽离出来,在布局管理器中另外处理,也方便开发者自行拓展。 阅读详情

相关推荐

解决ViewPager嵌套RecyclerView,RecyclerView嵌套RecyclerView瀑布流事件冲突问题

1.瀑布流效果 2.嵌套滚动效果实现 3.嵌套滚动浮动菜单栏 3.1嵌套事件链接机制 3.2实现上拉刷新,上拉加载更多

Tiger的专栏 2053

RecyclerView优化和使用场景

前言 最近写一个项目使用了嵌套RecycleView,但是加载完后,第一次滑动卡顿。找遍了所有的优化方案,很多方案只说了可以怎样怎样设置来进行优化,却没说什么场景下使用。特此总结汇总如下。先说我自己遇到的问题: getExtraLayoutSpace 使用场景:一个itemView就占了一屏大小的RecycleView 我是最外面一个竖排的RecycleView,然后内部的第二个item用了Gri...

BrainZou的博客 1741

Android RecyclerView

1.RecyclerView RecyclerView是Android 5.0推出的,是support-v7包中的新组件,它被用来代替ListView和GridView,并且能够实现瀑布流的布局,更加高级并且更加灵活,提供更为高效的回收复用机制,同时实现管理与视图的解耦合。RecyclerView提供了一种插拔式的体验,高度的解耦,异常的灵活,只需设置其提供的不同的LayoutManager,ItemAnimator和ItemDecoration,就能实现不同的效果。 RecyclerView的优点: ①支

zenmela2011的专栏 1万+

RecyclerView 数据更新方法 notifyItemChanged/notifyItemInsert/notifyIteRemoved

java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionViewHolder{424b7690 position=7 id=-1, oldPos=8,pLpos:8 scrap tmpDetached no parent} at android.support.v7.widget.RecyclerView

hnjzfwy的博客 2128

安卓之RecyclerView只点击RecyclerView不点击Item

今天讲一下RecyclerView这个控件,使得不点击里面的item,只点击RecyclerView,写了demo随便看看哈~~~ 首先先分析为什么我们设置了Recyclerview.setOnClickListener确没办法响应。其实可以看一下源码。 里面源码有这个也有点击事件的。其实直观的分析其实就是点击事件在item里面所以不在RecyclerView,导致RecyclerVi

fox_wei的博客 5220

Linux安装消息队列IBM MQ 7.5开发版安装配置详解

消息队列IBM MQ 7.5开发版安装配置详解 文章目录消息队列IBM MQ 7.5开发版安装配置详解前言一、什么是IBM MQ?二、安装前准备1、安装前准备2、安装MQ Server3、启动实例4、创建队列一个名为TEXT的队列(测试)5、启动端口监听6、启动成功总结 前言 IBM 已经熟练地优化了 MQ(消息队列),在市场上已有超过 25 年的历史。借助 MQ(消息队列),如果无法立即传递消息,那么会在其等待队列中确保消息安全,直到保证传递为止。竞争产品可能会传递两次消息或根本不传递消息,而 M

zhx__的博客 5165

真正带你搞懂 RecyclerView 的缓存机制,再也不怕面试被虐了

本文由 寒鸦飞尽 授权投稿https://juejin.im/post/5d6382cd6fb9a06b2262c0f8前言RecyclerView大概是Android开...

singwhatiwanna 4817

逆向分析TikTok的Cronet网络库:定位libsscronet.so并Hook关键SSL函数

本文深入探讨了逆向分析TikTok的Cronet网络库的技术细节,重点介绍了如何定位libsscronet.so并Hook关键SSL函数。通过Java到Native的调用链路追踪、So库定位策略和SSL验证函数的动态Hook技巧,帮助开发者突破定制化网络库的协议加密防护,实现流量解密和协议分析。

weixin_27875131的博客 970

解决Recyclerview刷新数据时滑动界面造成的奔溃。

错误提示: java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter positionViewHolder{775cd18 position=2 id=2, oldPos=-1, pLpos:-1 no parent} 2,错误分析:当数据列表清空的时候,这时候item也没有对...

花花世界的博客 4767

VCL for PHP,Konopka Signature VCL Controls (Raize Components 6.2.3) for Delphi 10.4

The Raize Components suite includes a variety of interface design tools for Delphi programming language and C ++ Builder, which includes over 125 VCL controls and over 100 different tools for creating...

weixin_42137539的博客 853

【锂离子电池力学耦合及相场法模拟技术与应用】

8. 电化学仿真软件的使用与案例分析 (1) 各向异性纳米线锂化应力分析(实例讲解1) (2) 化学反应及死锂现象研究(案例分析2)(3) 锂化循环损伤计算(案例分析3)6. 4. 电池材料的力学与电化学耦合性能分析(1) 耦合效应对电池性能的影响(2) 耦合模型的验证与应。5. 5. 电池颗粒、极片、电芯尺度力-电-化-热多场耦合模型概述力学-7. 颗粒尺度耦合模型在电池失效分析中的应用。2. 2. 电池电极材料的分类与特性。5. (2) 耦合模型的验证与应用。电化学耦合模型与仿真。

weixin_51101456的博客 523

为RecyclerView打造通用Adapter 让RecyclerView更加好用

转载请标明出处: http://blog.youkuaiyun.com/lmj623565791/article/details/47251585; 本文出自:【张鸿洋的博客】 一、概述记得好久以前针对ListView类控件写过一篇打造万能的ListView GridView 适配器,如今RecyclerView异军突起,其Adapter的用法也与ListView类似,那么我们也可以一步一步的为其打

Hongyang 16万+

手机如何高效辅助林业调查

手机如何高效辅助林业调查 很多林业工作者将栅格类型的地形图处理后导入平板电脑,在林地使用平板电脑加载小班矢量图,辅助林业调查。但是,如果没有地形图底图,这种方法可能就有难度,而且最重要的是,大部分林地工作者没有能力配置平板电脑。大凡林业基层工作者在林地调查时,除调查记录本等部分纸质材料外,都必然携带手机和水杯,此外其他设备已经成为累赘,尤其是炎热的夏季在杂灌丛生的林地进行调查作业。因此,使用手机...

xu780820的博客 3077

RecyclerView详解

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

Android 4万+

【网络】Ikuai中如何添加/更换虚拟机(图文)

Ikuai 添加虚拟机教程

qq_20623849的博客 6536

OpenClaw实战系列06:持久记忆与RAG知识库构建——让AI真正“记住”你

本文介绍了OpenClaw AI助理的持久记忆与RAG知识库构建功能。OpenClaw采用"文件即真理"的独特设计,所有记忆都以Markdown文件形式存储,支持直接编辑和Git版本管理。记忆系统分为三层:长期精炼记忆(MEMORY.md)、日常日志(按日期存储)和归档记忆。文章详细说明了环境配置步骤,包括安装必要组件、创建目录结构、设置API密钥,并提供了OpenClaw主配置文件的完整参数说明。该系统实现了跨会话、跨平台的持久化记忆,使AI助理能真正理解用户需求。

PeterPan的博客 1171

RecyclerView如何嵌套RecyclerView

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

Jonly_W的博客 2845

一篇文章足够你学习Bluez,提供史上最全的Bluez教程,让你告别Bluez从入门到放弃

Bluez是真的难,说“入门到放弃”真的毫不夸张,Bluez的学习曲线陡峭,要求对Linux 系统/驱动概念、D-Bus 通信和蓝牙协议都有要求,加上网络上其实没有一个完整的介绍Bluez系列的文档,所以不管是蓝牙初学者还是蓝牙从业人员,都有不小的难度。

朝气蓬勃 2539

RecyclerView

1. 基本使用方法     ListView 是 AdapterView的子类,AdapterView.OnItemClickListener、AdapterView.OnItemSelectedListener 这些关乎Item的操作都是在AdapterView中就有的抽象。     ListView 只是在此基础上加了一些其他的功能,比如:addFooterView、addHeaderVi

2151

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

RecyclerView的canScrollVertically

前几日在某机型上线上出现了一个与RecyclerView上划下滑相关的BUG。 源码解读 看了会儿RecyclerView的canScrollVertically(int direction)函数: /** * Check if this view can be scrolled vertically in a certain direction. * * ...

袋鼠 3346

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

RecyclerView嵌套RecyclerView的滑动问题如何解

一、概述 虽然今天我们要说的是Rv嵌套Rv的问题,但多数情况下我们都不会使用Rv嵌套Rv,去实现复杂的列表,而使用多个itemType实现,再难点的配合GridLayoutManager.SpanSizeLookup一起解决。 因为Rv嵌套Rv会有问题,如果嵌套的Rv高度没有设置明确的值,会一次创建所有的item,造成卡顿问题。类似我们在NestedScrollView里面嵌套Rv,Rv的高度写的是wrap_content/match_parent,一样的情况。 既然高度不确定,那我们给嵌套的Rv指定高度,

ganduwei的博客 4389

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Carousel Recyclerview:打造惊艳轮播效果的终极RecyclerView解决方案

Carousel Recyclerview是一款专为Android开发者设计的强大库,它通过自定义布局管理器的方式,让你能够轻松创建出令人惊艳的轮播效果。无论是实现图片展示、产品推荐还是内容轮播,这款终极RecyclerView解决方案都能满足你的需求,帮助你快速构建出专业级的轮播界面。 ## 为什么选择Carousel Recyclerview? 在移动应用开发中,轮播效果是提升用户体验的重

gitblog_00347的博客 1033

Android中RecyclerView嵌套RecyclerView

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

Vaccae的博客 1696

RecyclerView嵌套RecyclerView,内层RecyclerView区域无法响应Item点击

问题描述 项目中遇到了一个RecyclerView内嵌套RecyclerView,内层RecyclerView的区域无法响应所在Item的点击事件的问题(就是点击外层不能触发所在条目的点击事件)。 解决方式(形式不同,原理相同) 方式一 viewHolder.rv.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent ev.

Android格调小窝 2239

RecyclerView和ListView的区别、RecyclerView优化

一 ListView和RecyclerView区别 ListView 1.Adapter继承的是BaseAdapter。 2.可以直接在布局中设置分割线。 3.点击事件自带setOnItemClickListener方法 4.自带增加头部尾部方法 addHeaderView和addFooterView...

无与伦比的猪 4144
上一篇: 抓包
下一篇: Gallery,画廊效果
ThePromonkeyOf_HeLuo
博客等级 码龄11年 157粉丝 656原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值