Где разместить метод android BindingAdapter?

Это должно быть самым основным вопросом, но после полного дня чтения учебников и документации здесь Я не могу понять где поставить эти методы. Ни один из руководств не упоминает, где находится эта вещь, она просто упоминает об использовании аннотации статического метода. Какой статический метод? Любой статический метод вообще независимо от класса? Что такое хорошая практика? создать класс CustomBinding для размещения всех этих статических методов?

До тех пор, пока у меня есть метод с аннотацией BindingAdapter, и первым параметром является вид, он будет работать?

Я предполагаю, что если первый параметр имеет тип View, я могу поместить атрибут привязки для любого типа представлений, и он вызовет метод? Итак, если у меня есть конкретное представление, скажем, EditText, означает ли это, что метод вызывается только тогда, когда атрибут найден в представлении EditText в файле макета?

Ответы

Ответ 1

После навигации по Интернету я наконец нашел информацию от одного из разработчиков. Я хотел бы, чтобы они были более понятны в основах документации.

Цитата:

Связывающие адаптеры - это аннотированные методы в любом классе, которые используются для этого. Как правило, youd организует ваши адаптеры в [-a] классы на основе целевого вида View.

Это, очевидно, означает, что во время компиляции все методы в любом классе с аннотацией BindingAdapter будут генерировать BindingAdapter.

Ответ 2

Поместите его в класс модели.

Пример:

XML:

    <data>

    <variable
        name="item"
        type="com.yourpackage.Model"/>
      </data>
         ......

           <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@{item.resId}"/>

Модель:

public class Model {

@DrawableRes
private final int resId;

public Model(int resId) {
    this.resId = resId;
}

public int getResId() {
    return resId;
}

@BindingAdapter ("android:src")
public static void setImageResource(ImageView imageView, int resource){
    imageView.setImageResource(resource);
}

}