Пользовательский DataBindingComponent для каждого действия
Я могу создать 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();
}
}
и используется при настройке представления содержимого Activity следующим образом:
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 для каждого действия, поэтому он должен только предоставлять экземпляры, необходимые для действия, в котором я его использую?