当前位置: 首页 > news >正文

RecyclerView面试问答

RecycleView 和 ListView对比:
使用方法上
ListView:继承重写 BaseAdapter,自定义 ViewHolder 与 converView优化。

RecyclerView: 继承重写 RecyclerView.Adapter 与 RecyclerView.ViewHolder。设置 LayoutManager 来展示不同的布局样式

ViewHolder的编写规范化,ListView是需要自己定义的,而RecyclerView是规范好的;
RecyclerView复用item全部搞定,不需要像ListView那样setTag()与getTag();
RecyclerView多了一些LayoutManager工作,但实现了布局效果多样化;
2. 动画api
在RecyclerView中自带动画效果,例如:notifyItemChanged(), notifyDataInserted(), notifyItemMoved()等等;同时内置有许多动画API,如果需要自定义动画效果,可以通过实现(RecyclerView.ItemAnimator类)完成自定义动画效果,然后调用RecyclerView.setItemAnimator();
但是ListView并没有实现动画效果,需要在Adapter自己自定义;
3. 缓存区别
ListView和RecyclerView最大的区别在于数据源改变时的缓存的处理逻辑,ListView有二级缓存,
RecycleBin在layout的过程中便于view重用,RecycleBin有两级存储:ActiveViews和ScrapViews。
ActiveViews存储的是layout开始的时候屏幕上那些view。layout结束后,所有ActiveViews中的view被移动到ScrapViews中。
ScrapViews中的views是那些可能被adapter重新用到的view,以避免重新创建不必要的view。
而RecyclerView则是更加灵活地采用了四级缓存。
在这里插入图片描述

  • RecyclerView缓存的item的复用机制
    触摸角度
    在这里插入图片描述
    layout角度的话少一个scrapView的调用
    在这里插入图片描述
    在这里插入图片描述

设置缓存相关代码方法

//设置mCahceView的缓存数量
RecyclerView.setItemViewCacheSizepublic abstract static class ViewCacheExtension {@Nullablepublic abstract View getViewForPositionAndType(@NonNull Recycler recycler, int position,int type);}
//自定义缓存ImageCacheExtension继承RecyclerView.ViewCacheExtension,一般不自己写,你写了之后就不会走onBindView了,只会走getViewForPositionAndType,你可以从onBindView方法调用你的缓存方法,毕竟这个方法对于同个Viewholder的第二次回调只会发生在recyclerPool中,如果优先了ViewCacheExtension,那就只会走自己的缓存。
ImageCacheExtension cacheExtension = new ImageCacheExtension();//自定义Viewholder的缓存和获取缓存
RecyclerView recyclerView = findViewById(R.id.recycler_view);
recyclerView.setViewCacheExtension(cacheExtension);recyclerView.setAdapter(adapter);

RecyclerViewPool

RecyclerView.RecycledViewPool pool = new RecyclerView.RecycledViewPool();
RecyclerView.ViewHolder type1Holder = new Type1ViewHolder(LayoutInflater.from(this).inflate(R.layout.item_type_1, null))
http://www.lryc.cn/news/144550.html

相关文章:

  • Redis 7 教程 数据持久化
  • 【ArcGIS微课1000例】0072:如何生成空间权重矩阵
  • 【芯片设计封装与测试】芯片测试目的、方法、分类及案例
  • k8s集群证书过期解决
  • Linux学习之Ubuntu 20.04在github下载源码安装Openresty 1.19.3.1
  • bootloader串口更新程序[瑕疵学习板]
  • 浅谈视频汇聚平台EasyCVR视频平台在城市安全综合监测预警台风天气中的重要作用
  • GaussDB技术解读系列:高级压缩之OLTP表压缩
  • 管理类联考——英语二——实战篇——大作文——图表——静态图表——第一段
  • https 的ssl证书过期处理解决方案(lighthttpd)
  • 【java】【idea2023版】Springboot模块没有.iml文件的问题
  • Qt QScrollArea使用
  • Unity3d:GameFramework解析:实体,对象池,资源管理,获取计数,引用计数,自动释放
  • Django基础6——数据模型关系
  • 【chrome扩展开发】如何在项目中判断插件是否已安装
  • Centos 7.6 安装mongodb
  • Ubuntu下安装nginx服务,实现通过URL读取ubuntu下图片
  • 本地部署 Stable Diffusion(Mac 系统)
  • 浪潮云海护航省联社金融上云,“一云多芯”赋能数字农业
  • MyCat的XA事务研究及字符集问题
  • 9、监测数据采集物联网应用开发步骤(7)
  • 微信小程序开发教学系列(9)- 小程序页面优化
  • 如何将储存在Mac或PC端的PDF文件传输到移动设备呢?
  • 一图看懂架构划分原则:技术划分 OR 领域划分?
  • 从零开始的Hadoop学习(二)| Hadoop介绍、优势、组成、HDFS架构
  • 问道管理:逾4600股飘红!汽车板块爆了,多股冲击涨停!
  • Java 语言实现选择排序算法
  • 【C语言每日一题】05. 输出保留12位小数的浮点数
  • 科大讯飞永久免费GPT入口来了!!!
  • 亚马逊反馈和评论的区别