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

网站建设四川高中生做网站网页

网站建设四川,高中生做网站网页,无锡模板建站源码,成都网站建设公司浅谈介绍 RecyclerView是Android开发中常用的一个高度可定制的列表视图组件。它是在ListView和GridView的基础上进行了改进和增强#xff0c;旨在提供更好的性能和更灵活的布局管理。 RecyclerView的主要特点如下#xff1a; 灵活的布局管理器#xff08;LayoutManager#…介绍 RecyclerView是Android开发中常用的一个高度可定制的列表视图组件。它是在ListView和GridView的基础上进行了改进和增强旨在提供更好的性能和更灵活的布局管理。 RecyclerView的主要特点如下 灵活的布局管理器LayoutManager RecyclerView使用LayoutManager来管理其子视图的布局方式。不同的LayoutManager可以实现不同的布局效果如线性布局、网格布局、瀑布流布局等。可以根据需要选择适合的LayoutManager或自定义LayoutManager。 高效的回收再利用机制 RecyclerView通过Recycler来处理子视图的回收和再利用。当子视图滑出屏幕时RecyclerView会将其回收并标记为可重用。这样可以减少内存占用提高性能。 分离的ViewHolder模式 RecyclerView使用ViewHolder模式来管理子视图的数据绑定。通过创建ViewHolder来保存子视图的引用可以避免频繁的findViewById操作提高列表项的渲染效率。 动画支持 RecyclerView提供了对列表项的动画支持。可以通过设置ItemAnimator来实现添加、删除、移动等操作时的动画效果为列表增添交互和视觉效果。 事件拦截与处理 RecyclerView支持事件的拦截和处理可以监听和处理子视图的点击、长按、滑动等事件并根据需要进行相应的操作。 RecyclerView嵌套滑动 1.RecyclerView的嵌套滑动开始时会调用dispatchNestedPreScroll方法通知父容器即将发生的滑动事件。这是为了让父容器例如外部的ScrollView或NestedScrollView有机会对滑动事件进行预处理。 2.在dispatchNestedPreScroll之后RecyclerView会调用scrollByInternal方法进行滚动操作。scrollByInternal方法会计算滚动的偏移量并将其应用到RecyclerView的内容上。 3.接着RecyclerView会调用dispatchNestedScroll方法通知父容器滑动的实际情况包括滑动的距离和方向等信息。父容器可以根据这些信息来进行相应的处理例如触发边缘效果。 4.在dispatchNestedScroll方法之后RecyclerView会调用scrollStep方法其中包含滚动的水平和垂直偏移量。scrollStep方法会调用LayoutManager的scrollHorizontallyBy和scrollVerticallyBy方法以实现具体的滚动效果。 5.scrollHorizontallyBy和scrollVerticallyBy是LayoutManager的内部方法负责处理具体的水平和垂直滚动。它们会根据偏移量更新RecyclerView中可见视图的位置。 6.在滚动过程中LayoutManager会调用layoutChunk方法来填充新的可见视图。在这个过程中RecyclerView会调用recycler.getViewForPosition方法来获取指定位置的视图并使用measureChildWithMargins方法来测量视图的尺寸。 7.measureChildWithMargins方法是用来测量RecyclerView中每个可见视图的尺寸的。它考虑到视图的padding、margin和inset分割线的空间等因素确保视图能够正确地布局在RecyclerView中。 Fill方法 RecyclerView中的fill方法是用来填充可见视图的核心方法。在RecyclerView进行滚动时fill方法会被反复调用用于根据滚动方向和滚动偏移量来填充新的可见视图。 fill方法的主要逻辑 1.首先fill方法会根据滚动方向垂直或水平获取RecyclerView的布局状态LayoutState布局状态中包含了一些关键信息比如当前可见的位置、偏移量等。 2.然后fill方法会根据布局状态中的信息调用LayoutManager的next方法获取下一个要填充的子视图。LayoutManager会根据当前的布局状态和回收池Recycler中的视图选择合适的子视图并返回给fill方法。 3.接下来fill方法会调用LayoutManager的measureChildWithMargins方法对子视图进行测量。这个方法会考虑到子视图的padding、margin和inset等因素确保子视图能够正确地布局在RecyclerView中。 4.然后fill方法会调用LayoutManager的layoutDecorated方法对子视图进行布局。layoutDecorated方法会设置子视图的位置和尺寸将其正确地放置在RecyclerView中的指定位置。 5.填充完一个子视图后fill方法会更新布局状态中的一些信息比如当前可见的位置、偏移量等。 6.接着fill方法会判断是否填充完所有可见位置的子视图。如果还有未填充的位置fill方法会继续进行下一轮的填充。 通过不断调用fill方法RecyclerView能够动态地填充滚动过程中新出现的可见视图并回收滚出屏幕的不可见视图实现高效的滚动和视图复用。 需要注意的是fill方法的具体实现是由LayoutManager来定义的不同的LayoutManager可能会有不同的实现逻辑。在自定义LayoutManager时可以重写fill方法来实现特定的布局需求。 RecyclerView的多级缓存 mChangeScrap与 mAttachedScrap mChangedScrap该列表用于缓存仍然在屏幕内但【数据发生变化】的ViewHolder。当RecyclerView执行布局过程时它会标记数据有变化的ViewHolder并将它们添加到mChangedScrap中以便在稍后重新绑定数据。 mAttachedScrap这个列表用于缓存仍然在屏幕内且可见的ViewHolder。当RecyclerView滚动时屏幕上新进入的ViewHolder会添加到mAttachedScrap中以便在稍后进行布局和数据绑定。 ViewHoldermCachedViews 这个列表用于缓存已经离开屏幕的ViewHolder。当RecyclerView滚动时屏幕上移出的ViewHolder会添加到mCachedViews中。这些ViewHolder被缓存起来以便在需要时可以快速复用而不必重新创建。 ViewHoldermViewCacheExtension 这个机制允许开发者自定义视图的缓存和复用逻辑。通过实现ViewCacheExtension接口开发者可以指定一种特定类型的视图缓存方式以提高复用效率。 RecycledViewPool 这是一个全局的ViewHolder缓存池。当RecyclerView无法从其他缓存列表中找到可复用的ViewHolder时它会尝试从RecycledViewPool中获取。这个缓存池可以跨不同类型的ViewHolder进行复用以提高整体的复用效率。 RecyclerView进行ViewHolder的回收和复用时使用了以下几个关键的数据结构 mCachedViews 这是一个ArrayList用于缓存已经离开屏幕的ViewHolder。RecyclerView默认情况下会为该列表分配2个ViewHolder的空间即DEFAULT_CACHE_SIZE 2。如果列表已满最旧的ViewHolder将被移除。也可以使用setViewCacheSize方法来设置这个缓存列表的大小。 scrapHeap 这也是一个ArrayList用于存放回收池中的ViewHolder。回收池是全局的供整个RecyclerView使用。RecyclerView默认情况下会为该列表分配5个ViewHolder的空间即DEFAULT_MAX_SCRAP 5。当需要复用ViewHolder时首先尝试从回收池中获取ViewHolder。可以使用setMaxRecycledViews方法来设置回收池中ViewHolder的最大数量。 mScrap 这是一个SparseArray用于存储不同类型ViewHolder的回收数据。它是一个以整数作为键viewType的映射表每个键对应一个ScrapData对象。ScrapData对象包含了该类型ViewHolder的回收池mScrapHeap。通过这种方式RecyclerView能够针对不同的ViewHolder类型进行缓存和复用。 缓存复用 针对什么? 保存的是什么 对于ViewHolder的缓存复用针对的是不同类型的ViewHolder。保存的是已经创建过的、暂时不再需要显示在屏幕上的ViewHolder。 具体来说 缓存池中复用ViewHolder从回收池中获取 当需要创建一个新的ViewHolder时首先会尝试从回收池中获取对应类型的ViewHolder。回收池是一个用于缓存已创建的ViewHolder的池子。如果回收池中有可用的ViewHolder就可以直接复用它而无需重新创建。这个过程会调用onBindViewHolder方法用于更新ViewHolder的数据和界面。 从缓存视图列表中复用ViewHolder 如果回收池中没有可用的ViewHolder那么就会尝试从缓存视图列表中获取。缓存视图列表是一个专门用于缓存离开屏幕的ViewHolder的列表存储了一定数量的ViewHolder。如果成功从该列表中获取到可复用的ViewHolder就可以直接使用无需重新创建并且也无需调用onBindViewHolder方法因为这个ViewHolder之前已经显示过并绑定了数据。 如果无法从上述两个地方获取可复用的ViewHolder才会调用onCreateViewHolder方法创建一个新的ViewHolder实例并通过onBindViewHolder方法绑定数据和界面。 综上所述ViewHolder的缓存复用机制通过回收池和缓存视图列表来保存已经创建过的、暂时不再需要显示的ViewHolder实例。这样可以避免频繁地创建和销毁ViewHolder提高RecyclerView的性能和效率。
http://www.dnsts.com.cn/news/42944.html

相关文章:

  • 张家界酒店网站建设那些做面点的网站好
  • 昌江网站建设网站建设费计入 科目
  • 做电影网站如何推广方案做暖dnf动态ufo网站
  • 响应式网站模板网络营销推广的八大核心
  • 重庆城市管理学院网站手机网站建设设计
  • 保定市建设局安监网站凯里信息网
  • 企业为什么要做建站wordpress 自定义 空白
  • 临安市建设局网站设计类专业学校有哪些
  • 小学网站模板源码网页如何设计跑马灯效果
  • 企业标准型手机网站不适合做室内设计的人
  • 烟台市龙口建设局网站网站开发的三个流程
  • 招远做网站公司dw网页制作教程装修手册
  • 网站开发学生职业规划给个网址2022年能用的
  • 财政网站平台建设不足seo需要付费吗
  • 网站建设与维护教学视频教程北京网站建设公司黄页
  • 李青青做网站 公司主要做应用领域衡水网站建设怎么做
  • 怎么做商业网站模板罗湖网站建设设计
  • 城乡和住房建设厅网站网站产品图怎么做
  • 网站后台如何开发阿里云这么建设网站
  • 我想做卖鱼苗网站怎样做公司网页怎么设计
  • 未来做那些网站能致富如何做视频网站流程图
  • 企业官方网站如何做蓝v认证网站建设佰首选金手指十八
  • 电商网站 服务器微信做网站的弊端
  • 网站做的像会侵权吗wordpress ajax 注册
  • 公司付的网站费怎么做分录wordpress get author link
  • 企业网站建设三网合一怎样做自己的微商网站6
  • 咸阳市建设局网站长春网站建设与健
  • 建立问答类的网站网站做担保交易平台
  • 江西省网站建设先进表彰排名优化软件点击
  • 网站建设费财务列账更改wordpress密码