RecyclerView浅析
来源:互联网 发布:夏天手工坊淘宝网 编辑:程序博客网 时间:2024/06/11 09:07
RecyclerView是Android5.0新加入的用于替代ListView的UI控件,该控件与适配器Adapter、数据源DataSet的关系如下图所示:
RecyclerView的特性
相比于ListView,RecyclerView多了一个LayoutManager,Adapter也有所不同,下面将RecyclerView的新特性罗列如下:
- 必须指定Adapter和LayoutManager;
- 1、需要继承类RecyclerView.Adapter,重写下列方法:
- onCreateViewHolder(ViewGroup parent, int viewType);
- onBindViewHolder(ViewHolder holder, int position);
- getItemCount();
- 2、三种内置的LayoutManager
- LinearLayoutManager;
- GridLayoutManager;
- StaggeredGridLayoutManager;
- 1、需要继承类RecyclerView.Adapter,重写下列方法:
- 必须使用ViewHolder模式,以便复用每一个Item;
- 简化了大量数据的显示和处理;
- 1、提供了LayoutManager,用于定位Item Views,用于决定何时重用不再可见的Item Views;
- 2、提供了默认的动画,用于Items的添加和删除等操作;
- 可以自定义LayoutManager和动画;
- 1、继承类RecyclerView.LayoutManager;
- 2、继承类RecyclerView.ItemAnimator,重写方法RecyclerView.setItemAnimator();
在Eclipse中配置并使用RecyclerView
在Android官方文档中仅介绍了如何在Android Studio使用RecyclerView,并没有介绍如何在Eclipse中使用,其具体配置方法与同样是在Android5.0版本中引入的系统控件CardView相仿,具体步骤请参阅我的博文《在Eclipse中配置并使用UI控件CardView》。
XML布局
整体布局
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
注意:RecyclerView需使用全限定类名。
每个Item的布局
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
每个Item纵向布置了两个TextView。
定义DataSet
为了给每个Item装入数据,应定义一个类存放相应数据:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
定义Adapter
继承RecyclerView.Adapter,并重写该类中的3个方法;由于RecyclerView要求必须定义ViewHolder,故还需要在定义的Adapter中定义一个继承了RecyclerView.ViewHolder的内部类。具体代码示例如下所示:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
activity逻辑实现
与ListView相仿,设置RecyclerView为如下步骤:
- 设置数据源;
- 创建LayoutManager,为RecyclerView设置LayoutManager;
- 绑定数据源和Adapter;
- 为RecyclerView设置Adapter;
可见,设置RecyclerView比ListView多了第二步,就是设置LayoutManager。
具体示例代码如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
demo的实现效果
在Android Studio中引入RecyclerView
在Android Studio中引入RecyclerView比在Eclipse中简单得多,而且方法有两种:
- 在Gradle脚本的build.gradle文件中的dependencies中加入
compile 'com.android.support:recyclerview-v7:23.+'
即可。 - File–>Project Structure–>Modules(选择用到RecyclerView的module)–>Dependencies选项卡–>点击右上角”+”号引入
'com.android.support:recyclerview-v7:23.+'
依赖。
RecyclerView的基本用法
要点1:ViewHolder
ViewHolder是RecyclerView的内部类,该内部类要求必须实现,以复用AdapterView中的每一个Item。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
上述代码中MyViewHolder的构造方法需要传入一个View作为每个Item的布局。
要点2:Adapter
Adapter是RecyclerView的内部类,该内部类需要一个泛型参数ViewHolder,也就是自定义的ViewHolder。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
要点3:Activity中实现
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
实现效果
RecyclerView进阶
RecyclerView为Item提供了局部的增删改方法
在ListView中,若有Item中的数据需要增删改,可以调用adapter的notifyDataSetChanged方法,通知ListView刷新数据列表。
在RecyclerView中也有同样的方法实现同样的效果。除此之外,RecyclerView中的Adapter还提供了刷新增删改的某一项的方法,这些方法可以实现局部操作,节省内存开销。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
效果展示:
添加一条数据
删除一条数据
修改一条数据
要点4:LayoutManager
LayoutManager是RecyclerView的内部类,该内部类可以灵活定制AdapterView的布局形式:可以是类似于GridView的网格形式——需要new一个GridLayoutManager,可以是普通ListView形式——需要new一个LinearLayoutManager,甚至是瀑布流形式——需要new一个StaggeredGridLayoutManager。
将下面一行:
- 1
- 1
替换为:
- 1
- 1
将布局改变为GridView的样式,指定为5列(行),横向滑动,效果如下:
GridView样式,横向滑动,5行
或替换为GridView瀑布流样式:
- 1
- 1
上述代码是GridView瀑布流样式,布局为3列,纵向布置效果如下:
GridView瀑布流样式(每一项是交错的),2列,纵向布置
- RecyclerView浅析
- RecyclerView浅析
- UI控件RecyclerView浅析
- RecyclerView 的源码浅析
- Recyclerview用法浅析
- RecyclerView的onLayout浅析(一)
- RecyclerView的onLayout浅析(二)
- Android抢Listview饭碗之RecyclerView浅析
- Android RecyclerView浅析(分类型)
- RecyclerView 之Adapter的简化过程浅析
- RecyclerView源码浅析之测量与布局
- RecyclerView与ListView对比浅析(一):初始化篇
- RecyclerView与ListView对比浅析(二):View缓存篇
- RecyclerView与ListView对比浅析(三):绘制
- Android ListView 与 RecyclerView 对比浅析--缓存机制
- Android ListView 与 RecyclerView 对比浅析--缓存机制
- Android ListView 与 RecyclerView 对比浅析--缓存机制
- Android ListView与RecyclerView对比浅析--缓存机制
- G - Ancient Go
- 递归的内存超出问题
- 10.3Matlab 匿名函数、子函数
- sublime快捷键
- 学习计划安排 2016年底
- RecyclerView浅析
- 使用openssl生成RSA公钥和私钥对
- JavaScript form表单笔记
- Ubuntu 16.04设置Tab长度
- 新人掌握的五大Linux终端命令的技巧
- ubuntu安装maya2012整理
- Java中CountDownLatch与CyclicBarrier的区别
- JavaSE学习(7) 数组
- self.edgesForExtendedLayout=UIRectEdgeNone;