封装后的用法:
原始的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