首页 > 其他分享 >android recyclerview 总结

android recyclerview 总结

时间:2024-03-24 19:58:38浏览次数:25  
标签:总结 1.7 自定义 recyclerview 缓存 payloads 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)去除动画

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

标签:总结,1.7,自定义,recyclerview,缓存,payloads,android,RecyclerView
From: https://blog.csdn.net/ygn918042354/article/details/136912427

相关文章

  • 树和二叉树知识总结
    文章目录树树的定义树的其他表示方法树的基本术语树结构和线性结构的比较二叉树二叉树的定义二叉树的抽象数据类型定义二叉树的性质满二叉树完全二叉树完全二叉树的性质完满二叉树二叉树的存储结构顺序存储结构链式存储结构二叉树的遍历三种遍历方式递归实现非递归实......
  • Android系统结构介绍
    1.系统介绍        Android是Google开发的基于Linux平台的、开源的、智能手机操作系统。Android包括操作系统、中间件和应用程序,由于源代码开放,Android可以被移植到不同的硬件平台上。        OHA(OpenHandsetAlliance,开放手机联盟),为Google与33......
  • Android14音频进阶:AudioFlinger究竟如何混音?(六十三)
    简介:CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!优质专栏:Audio工程师进阶系列【原创干货持续更新中……】......
  • Android 11 -- app 服务保活
    app服务保活(android11源码)frameworks/base/services/core/java/com/android/server/am/ActiveServices.javastop后台service的逻辑:AMS的doStopUidLocked方法会先stop后台service,再去更新uid并分发uid的changestopInBackgroundLocked回调后,service不一定会真被stopvoid......
  • (Service)服务启动流程分析(Android 10.0)
    (Service)服务启动流程分析,AMS内保活服务(Android10.0)frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.javaframeworks/base/services/core/java/com/android/server/am/ActiveServices.javaframeworks/base/core/java/android/app/Contex......
  • 【面试】总结
    面向对象/c++/Javahttps://blog.csdn.net/qq_46111316/article/details/127933972QT信号槽机制YOLOv5OpenVINO深度学习/人工智能基础TransformerResNet,Pandas,Adam优化算法,飞桨框架408专业课......
  • 注解总结,Java中的注解,springboot中的注解
    注解总结1、Junit开始执行的方法:初始化资源,执行完之后的方法:释放资源测试方法,必须是:公有、非静态、无参无返回值的在一个类中,可以定义多个测试方法,每个测试方法可以单独运行,也可以整体运行(顺序:方法名升序)Junit4注解说明@Test测试方法@Before用来修饰实例方法,在每个@......
  • 知识总结--简单复习各部件
    目录内部结构部件介绍配置步骤之前学了很多部件,配置了很多参数,但是没有很系统地把他们连接在一起,今天这个图里简洁描述了资源与资源之间的关系。内部结构部件介绍黑框部分为CPU、内部有一个内核专门处理事件,所有的电信号中断信号都由内核处理。红框:CPU与外界用引脚......
  • Hive 时间戳日期函数总结
    说明基于Hive的数据开发工作中,常常用到时间戳,日期各种格式转换,今天抽时间梳理一下。1. 获取当前UNIX时间戳函数:unix_timestampselectunix_timestamp();17112685562、UNIX时间戳转日期函数:from_unixtimeselectfrom_unixtime(1711268371,'yyyyMMdd');--20240324......
  • # 单目深度估计基础理论和论文学习总结
    单目深度估计基础理论和论文学习总结一、背景知识:三维刚体运动的数学表示:旋转平移矩阵、旋转向量、欧拉角、四元数、轴角模型、齐次坐标、各种变换等照相机模型:单目/双目模型,单目中的世界坐标系/相机坐标系/图像坐标系的互相转换、畸变与矫正,双目涉及的视差和深度的反比关系、......