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

0 ответов

Другие вопросы по тегам