android简洁代码封装 -- RecyclerView.Adapter之MultiTypeAdapter封装

前言

  • RecyclerView在实际业务中,会有很多场景以及需求会使用到。常见的例如:Header&Footer,Refresh,LoadMore,Pinned Header等等。这些场景你是否都会根据具体的需求,单独维护一套RecyclerView和Adapter,例如XXRefreshRecyclerView,XXXPinedHeaderRecyclerView….对于如此运用,笔者想说维护成本太高了,一个项目若存在多个RecyclerView那肯定是有问题的。
  • 对于多个ViewTypeItem 的Adapter在加上Header和Footer,在加上ViewHolder的各个业务逻辑,你的Apdater是不是过于臃肿了,导致维护以及迭代的成本很高?
  • 因此,笔者这边博客的用意就很清晰了。基于上述2点,使用一个万能的RecyclerView来实现上述常用的功能,以及封装一套RecyclerView.Adapter来简化ViewHolder以及多个ViewTypeItem 的构建。
  • 但今天笔者先发布这个MultiTypeAdapter,后面会补充万能的RecyclerView封装。

项目

https://github.com/cxMax/MultiTypeAdapter
废话不说先上项目,有兴趣的可以看下readme.md,用法和各个类的用途也写得比较清楚了。

用法

跟Popup一样,这个的使用也只需要关心五个步骤:

  • 创建JavaBean类 :
    1. ViewHolder的数据源
  • 创建ViewHolder类 :
    1. 在constructor里面初始化view;
    2. 在update()方法里面,实现view更新;
    3. 可以继承BaseVH
  • 创建Provider类 :
    1. 需继承AbsItemProvider, AbsItemProvider具有于RecyclerView.Adapter相同的生命周期函数。
    2. 主要目的是实现ViewHolder与javabean的绑定。
    3. 一般来说, 只需要override,onCreateViewHolder()和onBindViewHolder()即可,其他生命周期函数不用关心。
    4. 当然你还需要override,isForViewType(),这个是来判定provider持有的data是同一个viewtype的。
  • 创建Adapter类 :
    1. 需继承MultiTypeAdapter, 一般来说,只需要override,registerAllProvider()和updateData()。
    2. ItemViewType可以在ViewTypeConstant中定义。
    3. 当然,对应具体的业务或者参数需要传递到viewholder,可以重写onCreateViewHolder()或onBindViewHolder(),具体参考GameCouponPinnedAdapter。
  • 最后在Activity或者Fragment中调用RecyclerView.setAdapter即可.

代码

android简洁代码封装 -- RecyclerView.Adapter之MultiTypeAdapter封装_第1张图片

类关系 说明

  • MultiTypeAdapter :
    1. 一个Adapter会持有一个MultiTypePool,对拥有的children进行注册.
  • MultiTypePool :
    1. 将不同ViewType的Provider保存在一个SparseArrayCompat里面,在对应Adapter的生命周期里面调用create和bind等相关方法。
  • AbsItemProvider :
    1. Adapter和ViewHolder的桥梁, 涉及到一些具体业务上的参数或者接口调用,都可以通过此来中转。
  • ViewTypeConstant :
    1. 保存不同Adapter的ViewType,每一个Adapter都可以其中新增一个child。
  • ViewHolder :
    1. 实现具体的item相关的视图改变,以及数据绑定。

最后

,
- 如果有什么疑问,或者代码有什么更好的建议,欢迎私信或者直接留言,或者Github上提issue,愿大家一同进步,嘿嘿。

你可能感兴趣的:(Android开发-案例解决,读书笔记-android进阶)