我可以像这样创建一个BindingAdapter:
public class MyClass {
@BindingAdapter("bindItems")
public static void bindItems(ViewPager viewPager, List<String> items) {
}
}
现在,如果我不希望这个绑定方法是静态的,而是封闭类的实例方法,我只省略static关键字:
public class MyClass {
@BindingAdapter("bindItems")
public void bindItems(ViewPager viewPager, List<String> items) {
}
}
但是我必须为数据绑定框架提供一种方法来获取包含@BindingAdapter
方法(MyClass
)的类的实例。
这可以通过DataBindingComponent的自定义实现来实现,如下所示:
public class MyDatabindingComponent implements android.databinding.DataBindingComponent {
public getMyClass() {
return new MyClass();
}
}
并在设置活动的内容视图时使用,如下所示:
DataBindingUtil.setContentView(this, R.layout.activity_test, new MyDatabindingComponent);
到目前为止一切顺利......但是!
此自定义DataBindingComponent必须为整个应用程序创建具有非静态@BindingAdapter
方法的类实例。
这很快就会失控,特别是当实例的创建不像我的例子那样微不足道时。我知道我可以使用DI,例如Dagger更容易创建MyDataBindingComponent
,我仍然不满意在我的活动中注入大量内容,而在该特定活动中并不需要这些内容。
获取失控的DataBindingComponent
的示例public class MyDatabindingComponent implements android.databinding.DataBindingComponent {
MyClass myClass;
MyClass2 myClass2;
MyClass3 myClass3;
@Inject
public MyDatabindingComponent(MyClass myClass, MyClass2 myClass2, MyClass3 myClass3) {
this.myClass = myClass;
this.myClass2 = myClass2;
this.myClass3 = myClass3;
}
public getMyClass() { // needed in Activity A
return myClass;
}
public getMyClass2() { // needed in Activity B
return myClass2;
}
public getMyClass3() { // needed in Activity C
return myClass3;
}
}
有没有办法让这些DataBindingComponent按活动进行,所以它只提供我在其中使用的活动所需的实例?