android recyclerview 总结

面试官问我熟不熟 recyclerview,我说不熟

他就没再继续问,整个过程还是比较丝滑的

呵呵??这么一个基础控件,你居然敢说不熟,真没想到

1 recyclerview相比listview的区别


  1.1 ViewHolder 的编写规范化了
  1.2 RecyclerView 复用 Item 的工作 Google 全帮你搞定,不再需要像 ListView 那样自己调用 setTag
  1.3 item之间的布局,可以通过布局管理器更方便的选择或自定义(默认有横向,纵向,网格)
        自定义布局管理器要重写RecyclerView在onmeasure onlayout里面埋的钩子,比较麻烦,
        尤其要注意 pre-layout和real-layout 防止多次调用onLayoutChildren
  1.4 更多的缓存:mAttachedScrap 直接缓存viewhold无需清楚后重新bind,只有最后一个根据类型分别同步的是需要重新bind的
        mCachedScrap--mViewCacheExtension中自定义缓存--mRecyclerViewPool
  1.5 局部刷新,要注意 payloads ,通过重新onBindViewHolder(MyViewHolder holder, int position, List<Object> payloads) 
       来进行item内部的复用,即: payloads不为空时候,不在走重新bind,而是从 payloads中取出数据,来让开发者自己刷新内容即可
       特别是大量调用局部刷新的时候,不重写这个小心页面抖动,残影


   
2   recyclerview 内部嵌套滑动冲突

 外部拦截,内部拦截两种,这里记录下内部拦截法,
 holder.recyclerView.setOnTouchListener { v, event ->
            when(event.action){
                //当按下操作的时候,就通知父view不要拦截,拿起操作就设置可以拦截,正常走父view的滑动。
                MotionEvent.ACTION_DOWN,MotionEvent.ACTION_MOVE -> v.parent.requestDisallowInterceptTouchEvent(true)
                MotionEvent.ACTION_UP -> v.parent.requestDisallowInterceptTouchEvent(false)
            }
            false}


   3 如何进行性能优化


    1.7.1 如果高度固定,可以设置setHasFixedSize(true)来避免requestLayout浪费资源,否则每次更新数据都会重新测量高度
    1.7.2 加大RecyclerView缓存,比如cacheview大小默认为2
    1.7.3 设置RecyclerView.addOnScrollListener();来在滑动过程中停止加载的操作
    1.7.4 用notifyDataSetChange时设置adapter.setHasStableIds(true),并重写getItemId()来给每个Item一个唯一的ID,使itemview的焦点固定,解决了闪烁问题
    1.7.5 当UI是Tab feed流,或嵌套多个recyclerview时,可以考虑使用RecycledViewPool来实现多个RecyclerView的缓存共享
    1.7.6 去除冗余的setitemclick事件,放到viewhold里面或者oncreateviewhold里,尽量不要放到onbind里,因为执行次数最多
     1.7.7 setItemAnimator(null)去除动画

好了,如此回答,是不是会好一点

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

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

相关文章

云主机搭建与服务软件部署

文章目录 登录访问云电脑与云电脑传输文件配置ssh服务ssh连接云电脑使用scp传输文件云端服务软件部署与实现外部访问首先购买云主机,以阿里云服务器 ECS为例子,官网购买就行了,选择默认安装了windows server 2022服务器系统 登录访问云电脑 购买完成进入控制台,能看到创建…

蓝桥杯第十三届蓝桥杯大赛软件赛决赛CC++ 研究生组之选素数

蓝桥杯第十三届蓝桥杯大赛软件赛决赛C/C 研究生组之选素数 [题目传送门](0选素数 - 蓝桥云课 (lanqiao.cn)) 问题大意&#xff1a; 小蓝有一个数字&#xff0c;要进行如下操作&#xff1a; 首先选出一个小于x 的质数p&#xff0c;然后将x变成要比原本大的最小的为p的倍数的…

js判断字符串是否为JSON格式

使用场景&#xff1a;在有些项目中我们会将用户输入的JSON字符串转化为对象形式并展示出来&#xff0c;那么首先我们就要判断一个字符串是否为一个合法的JSON字符串。 代码如下&#xff1a; isJSON(str) { if (typeof str string) { try { let obj …

使用CUDA 为Tegra构建OpenCV

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;MultiArch与Ubuntu/Debian 的交叉编译 下一篇&#xff1a;在iOS中安装 警告&#xff1a; 本教程可能包含过时的信息。 使用CUDA for Tegra 的OpenCV 本文档是构建支持 CUD…

谷歌具身智能最新进展:RT-H 机器人通用灵巧抓取

随着 GPT-4 等大型语言模型与机器人研究的结合愈发紧密&#xff0c;人工智能正在越来越多地走向现实世界&#xff0c;因此具身智能相关的研究也正受到越来越多的关注。在众多研究项目中&#xff0c;谷歌的「RT」系列机器人始终走在前沿&#xff08;参见《大模型正在重构机器人&…

各位老板,你需要的工厂数字孪生可视化库在这

各位老板是不是很喜欢下面这种有逼格的大屏,下面介绍一下怎么实现的,保证有所收获。 Cesium是一个开源的WebGL JavaScript库&#xff0c;用于创建高性能的三维地球、地图和虚拟环境。它支持在浏览器中实现高质量的地球模拟&#xff0c;同时提供了丰富的功能特点&#xff0c;使得…

Superset二次开发之PostgreSQL 统计信息介绍

pg_stat_user_tables 视图提供了关于 PostgreSQL 数据库中用户定义表的统计信息。这些统计信息涵盖了从表的扫描操作到修改次数等多个方面。 以下是 pg_stat_user_tables 中所有字段的含义&#xff1a; relid: 表的 OID&#xff08;对象标识符&#xff09;。这是表在系统中的…

k8s系列之十五 Istio 部署Bookinfo 应用

Bookinfo 应用中的几个微服务是由不同的语言编写的。 这些服务对 Istio 并无依赖&#xff0c;但是构成了一个有代表性的服务网格的例子&#xff1a;它由多个服务、多个语言构成&#xff0c;并且 reviews 服务具有多个版本。 该应用由四个单独的微服务构成。 这个应用模仿在线书…

模板高级使用(非类型模板参数,特化,分离编译)

文章目录 模板没有实例化取内嵌类型报错问题非类型模板参数模板的特化函数模板的特化类模板的特化1.全特化2.偏特化 模板的分离编译 模板没有实例化取内嵌类型报错问题 首先在这里分享一个模板的常见报错问题。就是模板的在没有实例化的情况下去取模板类里面的内嵌类型这时候的…

代码随想录|Day25|回溯05|491.非递减子序列、46.全排列、47.全排列II

491. 非递减子序列 本题并不能像 90.子集II 那样&#xff0c;使用排序进行树层去重。虽然题目没有明确不能排序&#xff0c;但如果排序了&#xff0c;集合本身就是递增子序列&#xff0c;这是LeetCode示例2中没有出现的。 所以本题的关键在于&#xff0c;如何在不排序的情况下对…

引入spring security 403问题

禁用 csrf 即可 httpSecurity.csrf(csrf -> csrf.disable()); Configuration public class SecurityConfig {/*** 认证管理器** param authenticationConfiguration* return* throws Exception*/Beanpublic AuthenticationManager authenticationManager(AuthenticationConf…

请解释 VB.NET 中的多态性(Polymorphism)以及如何实现它。

请解释 VB.NET 中的多态性&#xff08;Polymorphism&#xff09;以及如何实现它。 多态性&#xff08;Polymorphism&#xff09;是面向对象编程中的一个重要概念&#xff0c;它允许不同的对象对同一个消息作出不同的响应。在VB.NET中&#xff0c;多态性通过继承和方法重写来实…

2024格行VS华为VS飞猫哪个是最值得购买随身WiFi?中兴随身WiFi好用吗?

经常出差旅行&#xff0c;或者户外工作的朋友因为长期在外&#xff0c;手机流量经常不够用&#xff0c;想必都是随身WiFi的忠实用户&#xff0c;但是也都被这款产品割韭菜割的头皮发麻。今天&#xff0c;我们统计了市面上最靠谱的、最热销、口碑最好的几款随身WiFi。排名依据来…

Java学习笔记(17)

集合进阶 单列集合 Collection List set Add clear remove contains isempty size Add方法可能也会添加失败 同理&#xff0c;可能删除失败 Contains细节 为什么要重写equals&#xff1f; 因为contains底层用的是object类中的equals方法&#xff0c;比较的是地址值&#xf…

为什么穷人什么都懂,就是不懂赚钱?2024金矿项目! 2024创业好项目 !2024创业新项目新商机! 2024超级机会

为什么穷人什么都懂&#xff0c;就是不懂赚钱&#xff1f;有位网友是这么说的&#xff0c;穷人的思维有一个致命的缺陷&#xff0c;就是追求确定性&#xff0c;进而失去了可能性。而赚钱的真相实际上非常残酷。世界上能够赚钱的事情必定是不确定的&#xff0c;能够赚取巨额财富…

万亿参数GPU!算力提升30倍!英伟达新核弹B200重磅发布!

关注文章底部的公众号,获取每日AI资讯 前沿 3月18日-21日期间,英伟达在美国圣何塞召开GTC大会。创始人黄仁勋也在GTC大会上,做了一场长达两小时的开幕演讲,展示了其在AI芯片、机器人、汽车等领域的最新研发成果和技术进展,号称让全世界用上AI。 全球头号人工智能领域开发…

【JavaEE -- 文件操作IO有关面试题】

文件操作IO有关面试题 1.查找硬盘上的文件位置1.1 思路1.2 执行代码 2. 实现文件复制2.1 思路2.2 代码执行 3. 打印搜索的词的文件路径3.1 思路3.2 代码执行 1.查找硬盘上的文件位置 给定一个文件名&#xff0c;去指定的目录中进行搜索&#xff0c;找到文件名匹配的结果&#…

算法第三十一天-直方图的水量

直方图的水量 题目要求 解题思路 使用面向列的计算比面向行的计算更加容易。我们只需要考虑当前的位置的左右最高模板的高度。 方法一、暴力解法 每个位置能接到多少雨水&#xff0c;很容易想到[木桶效应]&#xff0c;即是由两边最短的木板限制的。那么直观思路就是&#x…

高职(大专)结构化面试之答题思路

目录 一、岗位认知 二、职教热点 三、教育教学 四、人际关系 五、组织管理 六、应急应变 七、时政与教育 八、专业知识 一、岗位认知 考试方向&#xff1a;主要考察对岗位的全面认识、职业目标、职业规划、职业理想。 必背题目&#xff1a; 1.“你为什么要报考我们学校的教师岗…

Postgres几种不同的索引提高查询性能

B-tree 索引&#xff1a; B-tree&#xff08;平衡树&#xff09;是 PostgreSQL 中最常用的索引类型。它适用于范围查询、排序和等值查询。B-tree索引对于数据类型的要求不严格&#xff0c;适用于大多数情况。 CREATE INDEX index_name ON table_name USING btree (column_name)…