Android: RecyclerView.ViewHolder、Adapter
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相关推荐
- Android RecyclerView设计通用Adapter
RecylerView 的使用频率现在也算做是很高了吧?使用起来的确是挺方便的,也容易实现一些比较好看的效果 一.一般步骤 一般的设计流程都是如下所示 首先是需要一个 JavaBean 来承载数据,包 ...
- android批量删除图片,Android RecyclerView单点、批量数据元素项目item的增加、删除和移动...
Android RecyclerView单点.批量数据元素项目item的增加.删除和移动 前文附录1,2介绍了基本的Android RecyclerView单点.批量元素项目的更新.现在给出其他比较重 ...
- Android listview viewholder
2019独角兽企业重金招聘Python工程师标准>>> Android ListView ViewHolder 利用adapter中的getView的 contentView 的复用 ...
- 【Android进阶】9、用 ViewHolder 和 Adapter 显示 RecyclerView 列表
文章目录 9.1 添加 CrimeListViewModel 9.2 添加CrimeListFragment 9.3 让 MainActivity 托管 CrimeListFragment 9.4 添 ...
- Android:打造“万能”Adapter与ViewHolder
##写在前面 最近一直忙着各种结课大作业,重新看起Android还有种亲切感.前段时间写项目的时候,学习了一个万能Adapter与ViewHolder的写法.说是"万能"其实就是在 ...
- Android RecyclerView 向上偏移解决、添加自定义分割线,瀑布流,ScrollView嵌套RecyclerView滑动卡顿
向上偏移解决 android:focusableInTouchMode="true" android:focusable="true" android:fill ...
- Android RecyclerView、ListView实现单选列表的优雅之路.
一 概述: 这篇文章需求来源还是比较简单的,但做的优雅仍有值得挖掘的地方. 需求来源:一个类似饿了么这种电商优惠券的选择界面: 其实就是 一个普通的列表,实现了单选功能, 效果如图: (不要 ...
- 【Android】ListView、RecyclerView、ScrollView里嵌套ListView 相对优雅的解决方案:NestFullListView
一 背景概述: ScrollView里嵌套ListView,一直是Android开发者(反正至少是我们组)最讨厌的设计之一,完美打破ListView(RecyclerView)的复用机制,成功的将Na ...
- Android RecyclerView之RecycledViewPool、SortedListAdapter
想必Tabs+ViewPager+ListView 结合使用的场景在你的Android手机中的各大应用里并不少见,比如最为典型的网易新闻. 众所周知,用RecyclerView可以非常简单的替代掉Li ...
最新文章
- php中单引号和双引号的区别,哪个速度更快?为什么?
- KVM的内存气球技术(balloon)
- 撸过一万行代码,你看过这篇文章吗?
- 【Filter】基础知识
- Simple Data帮助类
- 中国养蚕及深加工市场盈利模式与投资价值评估报告(2022-2027年)
- 一次win10更新引发的Grub Rescue
- Web安全之常见面试题总结
- cesium 移除实体方法
- 腾讯云服务器从购买到搭建tomcat
- 前端基础学习笔记 背景 渐变 倒影 遮罩
- 区块链链上数据全公开,你却不知道怎么查?找Gikee啊
- 计算机硬盘硬件的配置问题,磁盘硬件配置问题windows无法正常启动怎么解决
- 2020年就业形势严峻,UI设计师这条路还有前景吗?
- python人脸头发身体部位识别人数统计
- (已解决)EOFError: Ran out of input
- php中define的参数_php中define的含义及用法详解
- Python 最详细的 socket 相关内容解读
- java p2p 技术可行性分析_Atitit JAVA p2p设计与总结 JXTA 2
- 判断一个地图坐标是否在中国镜内