灵活且强大的RecyclerViewAdapter源码分析


今天周三,来自 陈宇明 的文章给大家推荐了一个RecyclerView适配开源库,这里我就不做赘述,详细的功能阅读正文即可。


陈宇明 的博客地址:http://www.jianshu.com/users/f958e66439f0


简介


相信大家对RecyclerView应该不会陌生,大多数开发者应该都使用上它了,它也是google推荐替换ListView的控件,但是用过它的同学应该都知道它在某些方面并没有ListView使用起来方便,需要我们额外的编写代码。


今天就给大家介绍一个Github上面的一个开源库,有了它让你使用RecyclerView的时候,和ListView一样的好用!它的名字叫做 BaseRecyclerViewAdapterHelper,地址:

www.recyclerview.org


接下来不仅仅要给大家介绍它能做什么,还要分析它的原理是如何实现。


节省Adapter大量代码


效果:




代码使用(赋值代码不超过10行):




原理分析:


找到重复部分代码,抽取到基类,非重复部分用抽象方法代替,具体让子类实现。


我们可以从上面的代码块中看到,他继承了 BaseQuickAdapter,其实 BaseQuickAdapter 重写了重复的代码,根据java的继承特性,儿子继承爸爸的财产,所以儿子很轻松,做的事情很少。




接下来我们再来看看关于赋值的 BaseViewHolder




它里面做了一个缓存机制,避免了重复加载view,把常用的set方法全部写好了,但是需要注意加载网络图片这一块需要开发者自己加载,因为考虑到实战项目中都有自己的图片加载库,如果封装在里面就耦合了,不能强迫所有的开发者都使用框架内置的图片加载库,所以在使用的代码块里面,我们可以看到它是通过一个 getView 的方法 拿到 imageView 对象再去通过自己的常用图片加载框架去做相应的图片加载。


添加点击事件


RecyclerView 没有ItemClick方法,可以在上面提过的 BaseQuickAdapter 里面添加 ItemClick,网上有很多写法都是在 onBindViewHolder 里面写,功能是可以实现但是会导致频繁创建,应该在 onCreateViewHolder() 中每次为新建的 View 设置一次就行了。如果想添加长按事件,也同理。


代码使用:




原理分析:




列表加载动画


效果:




代码使用:




原理分析:




关于开启动画:


首先判断是否开启动画,然后判断是否是自定义动画还是用户选择的自带动画,然后对动画的操作元素进行遍历执行,执行时间为300毫秒,由于上面说了每次填充数据都会调用,所以如何不判断的话,就会导致上下滑动每次都会重复调用动画,动画本身是会耗费性能的。


控制加载次数:


只需要添加一个 mLastPosition 来存储滑动过的位置,然后判断滑动的位置是否被滑动过,这样就可以避免每次都添加动画了。不过为了满足喜欢动画多过于性能的开发者,如果你想要每次滑动都带动画可以设置 isFirstOnly 属性即可,默认是不开启的。


添加头部尾部


效果:



使用代码:




原理分析:


实际上就定义多个不同类型的布局 :


  1. 重写 getItemViewType() 方法,根据需求规则给出不同的type值。


  2. onBindViewHolder() 里面根据不同 holder 的类型来赋予相对于的数据 。


  3. 如果有额外布局(如:头部尾部)需要修改 getItemCount() 方法的返回数量。


添加头部和尾部(额外布局):


在上面的基础之上再重写 getItemCount() 在原本数据量上加上根据额外布局的数量,代码如下:




注意:如果是添加头部 ,那就必须在原 onBindViewHolder() 里面 position 减去头部数量,因为不减去的话,那么数据就会从第二条开始遍历,所以要注意! 




篇幅有限,今天就介绍到这里,除了这些功能还有更多实用功能!项目持续更新中,觉得对自己有帮助的朋友可以star一下! 




如果你有好的技术文章想和大家分享,欢迎向我的公众号投稿,投稿具体细节请在公众号主页点击“投稿”菜单查看。


欢迎长按下图 -> 识别图中二维码或者扫一扫关注我的公众号:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值