介绍
使用@Kit注解,可自动完成RecyclerView中多类型Item与对应Data的适配绑定工作。框架通过控制反转(Inversion of Control,英文缩写为IoC)完成较大程度解耦,同时显著减少实际工作中的代码量。
Data
@Kit(ui = TitleKit.class)
public class Data {
//TODO 具体的数据结构
}Kit(即Item)
//自定义Item
public class TitleKit extends AbsKit {
@Override
public void onCreate(KitBaseAdapter adapter) {
super.onCreate(adapter);
//获取Adapter,便于拓展
}
@Override
public View getKit(ViewGroup viewGroup) {
//创建View,@see #onCreateViewHolder()
return inflateView(viewGroup, R.layout.item_title);
}
@Override
public void bind(int position, Object data) {
//@see #onBindViewHolder()
}
}RecyclerView
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List<Object> list = new ArrayList<>();
list.add(new TitleKit.Data());
KitBaseAdapter adapter = new KitBaseAdapter(list);
RecyclerView recycler = findViewById(R.id.recycler);
recycler.setLayoutManager(new LinearLayoutManager(this));
recycler.setAdapter(adapter);
}
}分析
技术社区常有“万能Adapter”出现,虽然其代码实现大多非常精湛,但是就其本质来讲,无非就是基于RecyclerView.Adapter的常见业务封装。
适配器模式的核心是完成数据到视图的映射,一种数据必然对应一种视图。当RecyclerView中出现多种Item时,Adapter会要求开发者根据具体业务去指定每种数据和对应视图的绑定关系,编码过程繁复、易出错。
RecyclerKit框架基于APT技术,自动生成包含Kit和Data对应关系的KitFactoryImpl.java文件,而KitBaseAdapter会读取KitFactoryImpl中的Mapping数据,并内聚了Kit和Data的适配绑定代码,有效的解决了传统Adapter开发的繁复问题。同时,继承于AbsKit的自定义Kit有效的隔离了业务需求,可高度复用。
具体实现请参照GitHub源码。
结语
ButterKnife、EventBus等基于APT技术的框架已经流行很久了,但是网络上讲解APT的例子大多是实现一个替代findViewById的简版ButterKnife框架。结合大量出现的“万能Adapter”类技术博客,我们不难得出一个结论:“举一反三”?不存在的,“学以致用”?并不常见。
当然,RecyclerKit也只是一个Demo级别,上述言论也并没有抨击任何人的意思。只是觉得这些事情放在一起,得出的结论值得我们反思。
最后,送给大家一句中学物理课本上的名言,共勉。
提出一个问题往往比解决一个更重要。因为解决问题也许仅是一个数学上或实验上的技能而已,而提出新的问题,却需要有创造性的想像力,而且标志着科学的真正进步。——爱因斯坦