上一篇从零开始的Android新项目8 - Data Binding高级篇中,我们提到了使用Component来进行注入,以方便进行测试的功能,有一些朋友说写的不够清楚,还有些疑惑,所以本篇就来详细说说Component。
作为例子,我们的实现目标是使用Data Binding Component,让应用全局的TextView的文本都能随时变成test,还能进行全局换肤。
代码位于DataBindingSample里面的component包下。
DataBindingComponent接口
在build/intermediates/classes
下面,可以找到DataBindingComponent
类,包名为android.databinding
,全局只会有一个该类——此接口在编译时生成,包含了所有用到的实例BindingAdapters的getter方法。
当一个BindingAdapter是一个实例方法(instance method),一个实现该方法的类的实例必须被实例化。这个生成的接口会包含每个声明BindingAdapter的类/接口的get方法。命名冲突会简单地加一个数字前缀到get方法前来解决。
如果使用Dagger 2,开发者可以继承这个接口,并把继承的接口注解为Component。
对应的接口有:
- setDefaultComponent(DataBindingComponent)
- inflate(LayoutInflater, int, ViewGroup, boolean, DataBindingComponent), inflate一个binding layout并返回新创建的binding
- bind(View, DataBindingComponent), 根据给定的layout root返回binding,如果没有则创建
第一个接口全局起作用,后两个接口仅对该语句inflate的布局起作用。
创建Component
声明抽象adapter
如果不需要实现多个Component,可以直接跳过这一步。
我们声明一个抽象的adapter,在其中写上抽象方法来设置我们想要做data bi