two - ¿Dónde colocar el método BindingAdapter de Android?
databinding android (2)
Esta tiene que ser la pregunta más básica, pero después de un día completo de lectura de tutoriales y la documentación here parece que no puedo entender dónde colocar estos métodos. Ninguna de las guías menciona dónde se coloca esta cosa, solo menciona el uso de la anotación en un método estático. ¿Qué método estático? ¿Algún método estático sin importar la clase? ¿Qué es una buena práctica? Cómo creo una clase CustomBinding para alojar todos estos métodos estáticos?
Mientras el método tenga una anotación de BindingAdapter y el primer parámetro sea una vista, ¿funcionará?
¿Supongo que si el primer parámetro es de tipo Vista, puedo colocar el atributo de enlace en cualquier tipo de vistas y activará el método? Entonces, si tengo una vista específica, digamos EditText, ¿significa esto que solo se llama al método cuando el atributo se encuentra en una vista EditText en el archivo de diseño?
Después de navegar por Internet, finalmente encontré información de uno de los desarrolladores. Desearía que hubieran sido más claros en los conceptos básicos de la documentación.
Los adaptadores de enlace son métodos anotados en cualquier clase que se utilizan para hacer precisamente esto. Por lo general, organizaría sus adaptadores en [-a] clases según el tipo de vista de destino.
Esto obviamente significa que en el momento de la compilación todos los métodos en cualquier clase con la anotación BindingAdapter generarán el BindingAdapter.
Lo colocas en tu clase de modelo.
Ejemplo:
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}"/>
Modelo:
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);
}
}