RecyclerView
这个控件可以代替ListView,可以代替GridView,可以实现瀑布流的效果,还支持很多自定义。使用非常 简单。
它可以实现的功能有哪些呢?
代替ListView,而且还支持正向反向,使用场景就一般的列表数据展示啦。也支持多类型,也就是列表里有多种类型内容。
代替GridView,也支持正向反向,使用场景就是一些分类呀,淘宝的商品,需要用格子分开的数据。
实现瀑布流的效果,都支持正向反向,使用场景就是类似于淘宝的商品,博客里的文章。
这是一个控件,不是三个控件就可以实现这三种效果。最重要的是,还支持自定义布局方式。
如何使用recyclerView
引入依赖
点击应用打开模块设置
打开依赖
大家看到的版本可能不一样,没关系,可以用即可。
依赖完以后,稍微等待构建完成即可。然后打开布局文件,测试一下有没有依赖成功,这个是要保证你的电脑是可以上网的,因为库是从网上下载的。
你敲代码时是有提示的:
使用的核心思想
不管是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)
从哪里开始更新,更新多少个内容。
末言
详细内容的话看视频吧,看完视频,跟着走一次,就知道怎么使用了。如果有什么的话,就在提问模块发帖子吧。
代码地址:https://github.com/TrillGates/RecyclerViewTest