RecyclerView是一个Android中列表展示的控件,可以实现各种列表的展示,包括了多内容、多类型、横向竖向、多列、动画、点击长按等各种效果

前言

相信RecyclerView对Android初学者来说是一个比较难理解的部分,因为它会涉及到很多部分

比如我在最开始的时候就很难理解为什么要用layoutManager和adapter,我想直接定义子布局,再定义子元素内容,最后一个列表赋值到RecyclerView不就可以了吗

这篇文章主要是为了对RecyclerView有更好的理解,可以真正明白为什么要这样做,如果可以回答上来下面的问题的话,说明对RecyclerView是有比较清晰的理解了

ReyclerView有几部分?为什么要有这几部分?

讲解组成部分

RecyclerView需要了解以下六部分:

示例

现在Gredicer,也就是小G,有了一个想法

“在一个界面上如果有多个相同类别的显示内容,一个一个复制太麻烦了,要是能直接读取列表里的内容显示出来就好了”

此时,RecyclerView的雏形就出来了:

recycleview基本用法(RecyclerView的使用与讲解)(1)

这个时候其实基本的思路有了,但是会有几个问题

  1. 如果这样定义的话,如果是单一的文本和TextView对应还好,但是不可能说每次我都是名字直接显示,假如是性别或者年龄,可能需要做判断,比如没有输入的话我就显示“无”,或者对List中的内容做处理再显示到ItemView中
  2. 内容和ItemView显示界面有大量的绑定,比如我一个商品列表,里面有很多图片和文字,我可能会需要一个专门的地方来做这些事
  3. 我想让每个Item可以点击或者长按,并且可以有相应的显示,比如跳转或者弹窗显示相应的内容
  4. 每个RecyclerView对应一个显示效果的话太麻烦了,我想只写一次定义,可以在很多地方用

OK,有了问题就要解决

于是,小G又想到了,我可以专门用VIewHolder来做UI和内容的绑定,同时也解决了内容判断处理的问题,然后专门用一个适配器Adapter,把这一整个部分,包括点击或者其他的事件都写在这里,RecyclerView只需要展示就行了,在各个界面写RecyclerView,然后如果需要什么样的效果就绑定Adapter就可以了

很好,这样的话整个结构就变成了如下所示

recycleview基本用法(RecyclerView的使用与讲解)(2)

但是但是,还是会有问题在的,比如:

至于第一个,小G想到了好办法,要想保证每个RecyclerView不同的方向,并且跟数据还没关系,那我就再定一个东西呗,名字就叫LayoutManager,用它来定义通用的几个布局,然后直接让RecyclerView来使用它就好啦!

第二个,小G就犯难了,这中间有好几个关键的问题

然后.....又延伸出来几个问题

啊这,啊这

看来还是得加

“既然动画的话,就专门加个ItemAnimator吧,然后逻辑跟LayoutManager一样,需要独立性”

“另一个,我在LayoutManager和ViewHolder之间再加一个缓存Recycler,用这个提前来计算和存储增删改查情况下的布局,到时候只需要从原有布局→动画→缓存布局或者反过来就好啦”

具体示例如下:

recycleview基本用法(RecyclerView的使用与讲解)(3)

到现在基本的RecyclerView就完成了!

小G高兴的去吃饭了

,