跳至主要內容

RecyclerView


RecyclerView

这个控件可以代替ListView,可以代替GridView,可以实现瀑布流的效果,还支持很多自定义。使用非常 简单。

20191003_142006.png
20191003_142006.png

它可以实现的功能有哪些呢?

代替ListView,而且还支持正向反向,使用场景就一般的列表数据展示啦。也支持多类型,也就是列表里有多种类型内容。

20191003_142144.png
20191003_142144.png

代替GridView,也支持正向反向,使用场景就是一些分类呀,淘宝的商品,需要用格子分开的数据。

20191003_142158.png
20191003_142158.png

实现瀑布流的效果,都支持正向反向,使用场景就是类似于淘宝的商品,博客里的文章。

20191003_142215.png
20191003_142215.png

这是一个控件,不是三个控件就可以实现这三种效果。最重要的是,还支持自定义布局方式。

如何使用recyclerView

引入依赖

点击应用打开模块设置

20191003_142735.png
20191003_142735.png

打开依赖

20191003_142856.png
20191003_142856.png

大家看到的版本可能不一样,没关系,可以用即可。

20191003_142919.png
20191003_142919.png

依赖完以后,稍微等待构建完成即可。然后打开布局文件,测试一下有没有依赖成功,这个是要保证你的电脑是可以上网的,因为库是从网上下载的。

你敲代码时是有提示的:

20191003_143242.png
20191003_143242.png

使用的核心思想

不管是ListView,还是ViewPager,又或者是GridView,它们的使用的套路是一样的。

首先是数据(Data),然后是适配器,接着是对应的控件

比如说ListView的使用,你要有数据吧,然后创建适配器,把数据给适配器,然后把适配器给控件,让控件去调用。

这里面,适配器是控制UI显示的,怎么显示适配器里面控制,显示什么数据,当然由数据源给来。

RecyclerView多一个步骤,就是设置布局管理器。

  • 第一步:当有数据,可以从本地有,可以从网络来,可以采集得到,这种实际情况实际获取。
  • 第二步:找到控件,对吧!findViewById(xxxx),或者new出来,对于新手同学来说,这种方式使用得比较少。
  • 第三步:设置布局管理器这步很重要,如果你忘记了,将不显示内容,即使你适配器有给,你数据有给。
  • 第四步:创建适配器,把数据喂给适配器,适配器控制显示
  • 第五步:把适配器设置给控件。

对于新手同学来说,按这个步骤走就好了。

至于适配器里的方法有什么用,我们等下再说。我们这里先说一下为什么会多一个布局管理器。你ListView没有这个玩意呀,你的GridleView也没有这个东西呀,对吧!ViewPager也没有。

这个布局管理器,LayoutManager,就是用来控制布局的,摆成什么样子呢,就由它控制。

比如说你要像ListView成一个列表,那么你给RecyclerView设置一个LinearLayoutManager,它就会像ListView一样显示内容,如果说你想显示成GridView一样,那么来一个GridlLayoutMnager,它就会显示成GrildView一样的效果。

也就是说,如果你想把RecyclerView变成ViewPager,也是可以的,但是你要学会自定义LayoutManager,这个后头,同学们学了自定控件再去理解吧。

先学会基本的使用,学会用RecyclerView代替ListView,代替GridView,一个控件走到下。

适配器的介绍

RecyclerView.Adapter<RecyclerView.ViewHolder>

我们在写RecyclerView的适配器时,继承自己一个RecyclerView的内容类。

 public final VH createViewHolder(@NonNull ViewGroup parent, int viewType)

这个方法呢,是用来创建item的,用一个ViewHolder包装着,已经处理了复用的问题,所以不用像ListView的适配器那样,设置到tag里,自己处理复用。

public final void bindViewHolder(@NonNull VH holder, int position)

这个方法呢,是用来绑定数据的,这里的holder,就是我们前面创建的那个viewholder。position有了,view也有了,那就可以从数据集合里拿出数据设置到view上了呀。

public int getItemViewType(int position)

这个方法顾名思义,用于获取item的类型的,至于什么 类型,你自己定。根据position来定。比如说,你这个列表,产品经理规定,第1个和最后一个显示公司的logo,其他的内容正常显示,那么,你就可以根据这个position来返回一个int的类型的值,在渲染item的时候,根据类型来设置数据即可。

 public abstract int getItemCount();

获取item 的个数,一般来说,我们返回数据集合的长度,但是也有特殊情况,比如说,你在数据集合的基础上,加了头尾,插入了其他的数据,这样子你的item个数应该是总数才对。

以下这几个是更新时调用的方法:

notifyDataSetChanged

数据更新时调用,全部更新,还有重载的方法,指定

public final void notifyItemChanged(int position)

还可以指定范围更新:

 public final void notifyItemRangeChanged(int positionStart, int itemCount)

从哪里开始更新,更新多少个内容。

末言

详细内容的话看视频吧,看完视频,跟着走一次,就知道怎么使用了。如果有什么的话,就在提问模块发帖子吧。

在线学习是视频open in new window

代码地址:https://github.com/TrillGates/RecyclerViewTest