【Android】RecyclerKit依赖注入框架

648 阅读2分钟
——自动完成RecyclerView中Item与Data的适配绑定

介绍

使用@Kit注解,可自动完成RecyclerView中多类型Item与对应Data的适配绑定工作。框架通过控制反转(Inversion of Control,英文缩写为IoC)完成较大程度解耦,同时显著减少实际工作中的代码量。

GitHub


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级别,上述言论也并没有抨击任何人的意思。只是觉得这些事情放在一起,得出的结论值得我们反思。


最后,送给大家一句中学物理课本上的名言,共勉。


提出一个问题往往比解决一个更重要。因为解决问题也许仅是一个数学上或实验上的技能而已,而提出新的问题,却需要有创造性的想像力,而且标志着科学的真正进步。

——爱因斯坦