1.简介

 用户滑动屏幕切换视图时,上一个视图会回收利用,RecyclerView所做的就是回收再利用,循环往复。

  • ViewHolder
    ViewHolder的主要任务:容纳View视图

  • Adapter
     Adapter从模型层获取数据,然后提供给RecyclerView显示,是沟通的桥梁。

  • Adapter主要的任务是:创建ViewHolder和将模型层的数据绑定到ViewHolder上。

RecyclerView与Adapter交互流程

 首先,调用Adapter.getItemCount()方法,RecyclerView询问数组列表中包含多少个待展示的视图
 接着,RecyclerView调用Adapter.onCreateViewHolder(ViewGroup, int)创建ViewHolder
 最后,RecyclerView会传入ViewHolder及其位置(position)调用onBindViewHolder(ViewHolder, int)方法。Adapter会找到目标位置的数据并将其绑定到ViewHolder的视图上
 需要注意的是相对于onBindViewHolder(),onCreateViewHolder()方法调用并不频繁。一旦有了够用的ViewHolder,RecyclerView就会停止调用onCreateViewHolder()方法。随后,它会回收利用旧的ViewHolder以节约时间和内存。

  • LayoutManager
     RecyclerView不会亲自摆放屏幕上的列表项,摆放列表项的任务被委托给了LayoutManager。除了在屏幕上摆放列表项,LayoutManager还负责定义屏幕滚动行为
     除了一些Android系统内置版实现,LayoutManager还有很多第三方库实现版本。

2.ViewHolder

ViewHolder承载的是每一个列表项的视图,所以当使用RecyclerView的时候需要先对ViewHolder进行初始化定义

private class CrimeHolder extends RecyclerView.ViewHolder {public CrimeHolder(LayoutInflater inflater, ViewGroup parent) {super(inflater.inflate(R.layout.list_item_crime, parent, false));}
}

 注意到CrimeHolder构造器方法调用了父类构造器super(View view)----ViewHolder(View view)。因而CrimeHolder实际上引用了已被实例化的list_item_crime布局的视图,且同时这个视图被赋给了父类变量itemView,我们可以在itemView变量处获得该视图。

3.Adapter

 当需要显示新创建ViewHolder或让数据和已创建的ViewHolder关联时,就会用到Adapter。在Adapter中通常需要实现3个方法:

  • onCreateViewHolder(ViewGroup parent, int viewType)
     当需要新的ViewHolder来显示列表项时,会调用onCreateViewHolder方法去创建ViewHolder
public CrimeHolder onCreateViewHolder(ViewGroup parent, int viewType) {LayoutInflater layoutInflater = LayoutInflater.from(getActivity());return new CrimeHolder(layoutInflater, parent);
}
  • onBindViewHolder(CrimeHolder holder, int position)
     将数据绑定在ViewHolder上。
public void onBindViewHolder(CrimeHolder holder, int position) {holder.bind(position);
}
  • getItemCount()
    返回总共要显示的列表的数量(创建的ViewHolder数量比前者要小得多)。
public int getItemCount() {return list.size();
}

Android: RecyclerView.ViewHolder、Adapter相关推荐

  1. Android RecyclerView设计通用Adapter

    RecylerView 的使用频率现在也算做是很高了吧?使用起来的确是挺方便的,也容易实现一些比较好看的效果 一.一般步骤 一般的设计流程都是如下所示 首先是需要一个 JavaBean 来承载数据,包 ...

  2. android批量删除图片,Android RecyclerView单点、批量数据元素项目item的增加、删除和移动...

    Android RecyclerView单点.批量数据元素项目item的增加.删除和移动 前文附录1,2介绍了基本的Android RecyclerView单点.批量元素项目的更新.现在给出其他比较重 ...

  3. Android listview viewholder

    2019独角兽企业重金招聘Python工程师标准>>> Android ListView ViewHolder 利用adapter中的getView的 contentView 的复用 ...

  4. 【Android进阶】9、用 ViewHolder 和 Adapter 显示 RecyclerView 列表

    文章目录 9.1 添加 CrimeListViewModel 9.2 添加CrimeListFragment 9.3 让 MainActivity 托管 CrimeListFragment 9.4 添 ...

  5. Android:打造“万能”Adapter与ViewHolder

    ##写在前面 最近一直忙着各种结课大作业,重新看起Android还有种亲切感.前段时间写项目的时候,学习了一个万能Adapter与ViewHolder的写法.说是"万能"其实就是在 ...

  6. Android RecyclerView 向上偏移解决、添加自定义分割线,瀑布流,ScrollView嵌套RecyclerView滑动卡顿

    向上偏移解决 android:focusableInTouchMode="true" android:focusable="true" android:fill ...

  7. Android RecyclerView、ListView实现单选列表的优雅之路.

    一 概述: 这篇文章需求来源还是比较简单的,但做的优雅仍有值得挖掘的地方. 需求来源:一个类似饿了么这种电商优惠券的选择界面:  其实就是 一个普通的列表,实现了单选功能,  效果如图:    (不要 ...

  8. 【Android】ListView、RecyclerView、ScrollView里嵌套ListView 相对优雅的解决方案:NestFullListView

    一 背景概述: ScrollView里嵌套ListView,一直是Android开发者(反正至少是我们组)最讨厌的设计之一,完美打破ListView(RecyclerView)的复用机制,成功的将Na ...

  9. Android RecyclerView之RecycledViewPool、SortedListAdapter

    想必Tabs+ViewPager+ListView 结合使用的场景在你的Android手机中的各大应用里并不少见,比如最为典型的网易新闻. 众所周知,用RecyclerView可以非常简单的替代掉Li ...

最新文章

  1. php中单引号和双引号的区别,哪个速度更快?为什么?
  2. KVM的内存气球技术(balloon)
  3. 撸过一万行代码,你看过这篇文章吗?
  4. 【Filter】基础知识
  5. Simple Data帮助类
  6. 中国养蚕及深加工市场盈利模式与投资价值评估报告(2022-2027年)
  7. 一次win10更新引发的Grub Rescue
  8. Web安全之常见面试题总结
  9. cesium 移除实体方法
  10. 腾讯云服务器从购买到搭建tomcat
  11. 前端基础学习笔记 背景 渐变 倒影 遮罩
  12. 区块链链上数据全公开,你却不知道怎么查?找Gikee啊
  13. 计算机硬盘硬件的配置问题,磁盘硬件配置问题windows无法正常启动怎么解决
  14. 2020年就业形势严峻,UI设计师这条路还有前景吗?
  15. python人脸头发身体部位识别人数统计
  16. (已解决)EOFError: Ran out of input
  17. php中define的参数_php中define的含义及用法详解
  18. Python 最详细的 socket 相关内容解读
  19. java p2p 技术可行性分析_Atitit JAVA p2p设计与总结  JXTA 2
  20. 判断一个地图坐标是否在中国镜内

热门文章

  1. Spark in meituan http://tech.meituan.com/spark-in-meituan.html
  2. epoll 使用详解
  3. WCF 第十二章 对等网
  4. WebSocket+MSE——HTML5 直播技术解析
  5. 使用FFmpeg生成HLS
  6. SDL介绍和简单实用
  7. H264码流结构分析
  8. TCP如何能正常关闭连接?
  9. 设计模式-行为-模板方法
  10. C/S框架-发布和部署WebService