asc*_*sco 5 android android-databinding
我可以这样创建一个BindingAdapter:
public class MyClass {
@BindingAdapter("bindItems")
public static void bindItems(ViewPager viewPager, List<String> items) {
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我不希望此绑定方法是静态的,而是希望封闭类的实例方法,则只需忽略static关键字:
public class MyClass {
@BindingAdapter("bindItems")
public void bindItems(ViewPager viewPager, List<String> items) {
}
}
Run Code Online (Sandbox Code Playgroud)
但随后,我必须为数据绑定框架提供一种方法,以获取包含@BindingAdapter方法(MyClass)的类的实例。
使用DataBindingComponent的自定义实现可以实现这一点,如下所示:
public class MyDatabindingComponent implements android.databinding.DataBindingComponent {
public getMyClass() {
return new MyClass();
}
}
Run Code Online (Sandbox Code Playgroud)
并且在设置“活动”的内容视图时使用,例如:
DataBindingUtil.setContentView(this, R.layout.activity_test, new MyDatabindingComponent);
Run Code Online (Sandbox Code Playgroud)
到目前为止一切顺利...但是!
此自定义DataBindingComponent必须@BindingAdapter使用整个应用程序的非静态方法创建类的实例。
这很快就会失控,特别是当实例的创建不像我的例子那么简单时。我知道我可以使用DI,例如Dagger来更轻松地创建MyDataBindingComponent,但我仍然不满意将很多东西注入到我的Activity中,而在该特定Activity中并不需要很多东西。
失去控制的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;
}
}
Run Code Online (Sandbox Code Playgroud)
是否有任何方法可以使这些DataBindingComponent按活动进行,因此它仅需提供我使用它的活动中所需的实例?
| 归档时间: |
|
| 查看次数: |
222 次 |
| 最近记录: |