RecyclerView.Adapter的封装之路

封装后的用法:

原始的Adapter

这里写图片描述

这里写图片描述

这里写图片描述

单布局的Adapter

这里写图片描述

这里写图片描述

多布局-单实体的Adapter

这里写图片描述

这里写图片描述

多布局-多实体的Adapter

这里写图片描述

这里写图片描述

多布局-多实体-多列的Adapter

这里写图片描述

这里写图片描述

具体的封装过程:

1-SingleAdapter:将Adapter从具体到泛型

思路:
1. 构造时传入layoutId
2. 数据类型泛化
3. 提取出万能的SuperViewHolder
4. bindData的方法抽象化,延迟实现(交由具体的子类实现)

这里写图片描述

这里主要是:
这个万能ViewHolder
这里写图片描述

2-MultiAdapter:从单布局到多布局

思路:
1. 构造时传入layoutId数组
2. 添加layoutMap,记录layoutId–viewType的对应关系
3. bindLayout的方法抽象化,由子类实现Item–layoutId的对应关系

这里写图片描述

这里主要有以下两部分:
用map存放viewType和layoutId的对应关系
这里写图片描述

用map.entrySet来根据value读取key
这里写图片描述

3-SuperAdapter:多布局中,从单实体到多实体

思路:
1. 将泛型T升级为包装类LayoutWrapper,持有布局id,泛型数据Item,控制器holder
2. 提取出接口DataHolder,用于实现ViewHolder和ItemData的绑定

这里写图片描述

这里主要是:
1、定义了布局包装类
这里写图片描述

2、定义了控制器接口
这里写图片描述

3、由控制器接口的bind来负责绑定
这里写图片描述

4-LayoutWrapper:多布局中,配置某项可占据多列

思路:
1. LayoutWrapper添加spanSize属性,记录该item的列数
2.使用时调用gridLayoutManager.setSpanSizeLookup来动态设置列数
这里写图片描述

然后使用时:
这里写图片描述

1、如果你的代码中,存在着大段相同或极其相似的代码,那么,开始重构吧!
2、在不断的重构中,你会发现:实现很重要,如何组织这些实现也同样重要!
3、重构两个着力点:数据泛型化、方法抽象化

所有代码均已上传到:Github,欢迎Star!

菜鸟一枚,水平有限,欢迎大家指出博文中的不足之处,小鱼将不胜感激!@qq:630709658

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值