大家好,已经有一段时间没有写博客了,51放了个好假哈哈哈。我在CSDN现在也在写博客,是一些关于Android进阶的一些东西,希望大家还是多去光顾一下,帮我找找哪里有不足。
链接:季白的CSDN博客
大家还记得我们学过的ListView吧,今天在群里跟朋友们交流了一下,有的人说按照谷歌的尿性,再过几个版本就要彻底舍弃ListView了(是不是真的我不知道,不过就算舍弃,我们也还是得会用是吧哈)。而与之有着相同功能的一个控件,甚至功能比他更加强大的一个控件,叫做RecyclerView,这个控件也是为了展示多条目item的一个控件,他和ListView相比,还有很多别的功能:比如我们如果想让列表为横向滑动,或者想将列表设置为瀑布流。。。这些ListView就不能做到了,今天我们来一起看一下RecyclerView:
这个是RecyclerView的效果:
RecyclerView效果是不是跟ListView很像。现在让我们看看他是怎么使用的:
1.添加依赖,
RecyclerView不像ListView是系统只带的,他需要我们注入依赖,
我选用版本26.1.0。
现在我们可以在布局中使用它了。
2.添加布局
3.java代码
上面这些步骤很多都熟悉了,我们只说一个,LinearLayoutManager,我们把这个属性放到recyclerview中,用来指定他的布局类型,现在我们指定为线性布局,而且为竖直滑动。
4.适配器代码
这个可以说是我们最头疼的了,没关系我们慢慢来看:
我们发现我们的RecyclerView的适配器不再是继承BaseAdapter了,而是继承RecyclerView内置的适配器,然后我们需要创建ViewHolder。这个ViewHolder同样是继承RecyclerView的。
我们指定了ViewHolder类型为我们的MyViewHolder,并且重写了构造方法。为什么能这么写呢?我们点击RecyclerView.Adapter构造方法的源码看一下,
他指定了泛型必须为ViewHolder或者他的子类,所以我们的MyViewHolder可以写进去。
紧接着我们实现了三个方法,分别是onCreateViewHolder、onBindViewHolder和getItemCount。这三个方法中最熟悉的应该是getItemCount了,它跟我们BaseAdapter中的getCount方法功能一模一样。
我们回想一下BaseAdapter需要实现的方法有四个,getCount、getItem、getPosition和getView, 出去getCount,还有三个方法。其实我们只需要看getView,
onCreateViewHolder和onBindViewHolder可以说将getView分成了两个部分,一个是创建ViewHolder,一个是添加数据。我们的getView方法不就是这样吗。
我们首先需要传入数据和上下文。
这是我们重新写完了的onCreateViewHolder方法。只是一个布局传入ViewHolder中,然后返回holder。没什么难度。
我们既然构造器中传入了view,就肯定需要做点什么,我们把布局中的控件全部写进了Viewholder中,然后在构造器中获取。
接着我们看onBindViewHolder方法:
对了,不要忘记我们的getItemCount方法:
我们的onBindViewHolder是将我们的数据传入对应控件中,现在我们来看一下效果如何;
我们现在把他指定成横向滑动:
最后那个boolean类型的参数是指定我们视图起始的位置,如果为true就从末尾到头,false则从头到尾,这个大家自己试一下就知道什么意思了。
光这一点ListView就做不到了,
瀑布流布局实现
只是改了一行代码,吧输入的布局改为了GridLyaout,然后指定为纵向滑动。
设置点击事件
我们首先需要一个接口
然后我们要给点击的item 注册点击事件。
然后需要写一个方法给接口赋值。
最后是我们的实现
效果大家自己试一下,这里就不展示了。
网友评论