RecyclerView

注:RecyclerVIew不仅可以实现和ListView同样的效果,还有优化了ListView中的各种不足。RecyclerVIew既可以实现数据纵向滚动,也可以实现横向滚动,而ListView做不到横向滚动

要先在app文件夹下的build.gradle中导包,别导错位置了

implementation 'androidx.recyclerview:recyclerview:1.1.0'

别忘了点右上角同步一下  

或者点这个小象也能同步

因为RecyclerView和ListView很相似,所以有些代码是可以共用的

我们直接把之前写的ListView中的Bean和activity_main.xml复制过去

当然activity_main.xml中这里的ListView要改成RecyclerView依赖包的全类名

id别忘了改一下,我改成rv

再创建一个recyclerview_item

和之前的list_item差不多

MainActivity中的数据也一样

同样,也创建一个MyAdapter

注:但是这个MyAdapter和ListView中的不一样了,ListView的MyAdapter是直接继承的BaseAdapter,

而RecyclerView

而RecyclerView继承的Adapter中可以看到是一个泛型,而我们一般可以在这个泛型中再写一个类

注:这个MyViewHolder可以联想到之前在ListView中为了优化性能,我们自己创建的ViewHolder类,

而RecyclerView为了统一这样的格式,直接让我们在继承Adapter去实现MyAdapter的时候,就强制性让我们去创建一个ViewHolder,这样就避免了我们在使用ListView的时候没有使用ViewHolder进行优化的情况。

所以这也是RecyclerView比ListView不一样的厉害的一点

继续,alt+enter创建一下MyViewHolder类

再alt+enter导入一下方法

发现这里还有问题

因为我们创建的

只是一个普通类,MyViewHolder还需要继承

然后我们再alt+enter创建构造方法

这样我们的MyAdapter初步完成

接着我们再把数据传进来,和ListView一样,需要通过外部传

先把数据导入

回到MainActivity,拿到activity_main.xml中RecyclerView的id:rv

注:所以其实之前构造方法中的itemView就是这个onCreateViewHolder中的view

那么我们findViewById在哪处理呢,其实是在MyViewHolder中处理

还有一个

注意此时还不能直接run

回到MainActivity

这个地方,其实我们还需要给recyclerView进行布局

注:在ListView中的时候,是不需要布局的,因为ListView默认就是垂直布局,而RecyclerView在这里把布局模块给抽离了出来,所以这样就会使RecyclerView布局更加的灵活

回到MainActivity中

run一下,和ListView差不多了(虽然还没设置点击事件)

除了线性布局,还有一些其他的布局

网格的布局,后面int的那个参数就是要我们一行显示几个

run一下

还有一个瀑布流的布局

StaggeredGridLayoutManager()的源码:

所以

可以这样写,但是实际上还能简单一些,

其实源码中就是使用的LinearLayout.VERTICAL或者LinearLayout.HORIZONTAL

run一下发现好像和网格的一样啊,其实不然,我们去上面的for循环中改一下数据

run一下

发现对不齐,产生了错位现象,那我们重新用网格布局看看效果

网格布局还是对的很齐的

所以瀑布流布局,顾名思义,和瀑布一样,顺着下来,不会留空白

注:更多LayoutManager进阶技术还可以实现自定义,实现更多炫酷的布局

接下来实现ltem的点击效果

注:因为RecyclerView没有给我们提供像ListView里面一样的监听点击事件,所以我们需要自己去设置

先直接在MyAdapter中设置监听,然后再在MainActivity中使用即可

接着我们怎么在这个抽象方法中实现监听方法的回调呢?

其实直接通过上面MyViewHolder()中的itemView来设置监听去处理

继续第❺步

这里其实就和正常我们设置监听的时候一样的

这样的话,每当我们点击这个itemView的时候,也就是我们每次点击这些item栏目的时候,那么就会触发我们的这个onClick这个方法

在这个onClick方法里面,我们再进行一个判断

回到MainActivity中

run一下

完成

补充:有时候要做横屏滑动可以怎么做?

看一下LinearLayoutManager()源码,里面的参数,

所以这样填

就ok了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏夜追凉丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值