jetpack español databinding data compiler android android-databinding

español - databinding expression android



El adaptador de enlace de Android que pasa varios argumentos causa un error (4)

Soy bastante nuevo en el Android Data Binding . Estoy siguiendo este tutorial: Data Binding Library . Estoy tratando de hacer un adaptador que recibe varios parámetros. Este es mi código:

XML

<ImageView android:layout_width="@dimen/place_holder_size" android:layout_height="@dimen/place_holder_size" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_centerVertical="true" app:url="@{image.imageUrl}" app:size="@{@dimen/place_holder_size}" />

CLASE DEL ADAPTADOR DE UNIÓN

public class ViewBindingAdapters extends BaseObservable { @BindingAdapter({"bind:url", "bind:size"}) public static void loadImage(ImageView imageView, String url, int size) { if (!Strings.isNullOrEmpty(url)) { Picasso.with(imageView.getContext()).load(url).resize(size, size).centerCrop().into(imageView); } } .... }

Pero estoy recibiendo este error:

java.lang.RuntimeException: Se encontraron errores de enlace de datos. **** / error de enlace de datos **** msg: no se puede encontrar el configurador para el atributo ''app: url'' con el tipo de parámetro java.lang.String en android.widget.ImageView. archivo: ... li_image_item.xml loc: 30: 27 - 30:40 **** / error de enlace de datos ****

¿Alguien sabe por qué?

¡Gracias por adelantado!


Actualizar

No es necesario crear el bind: prefijo bind: solo usa esto.

@BindingAdapter({"url", "size"}) public static void loadImage(ImageView imageView, String url, float size) { }

En xml usar cualquier prefijo como app:

app:url="@{image.imageUrl}"


El problema es @dimen/place_holder_size , devuelve float mientras lo captura como int

cambia tu método BindingAdapter a esto

@BindingAdapter({"bind:url", "bind:size"}) public static void loadImage(ImageView imageView, String url, float size) { }

puedes referir this


Lo que hice mal es el orden de los argumentos en la función. Puede agregar varios atributos en el adaptador de enlace, pero deben coincidir con los argumentos con la misma secuencia definida en el método .

Aquí está mi fragmento de código para Kotlin

@BindingAdapter(value = ["bind:brand", "bind:model", "bind:age"], requireAll = false) @JvmStatic fun bindProductDetails(linearLayout: LinearLayout, brand: String?, model: String?, age: String?) { if (brand != null && !brand.isEmpty()) { //code //code } }


prueba esto

@BindingAdapter(value={"url", "size"}, requireAll=false) public static void loadImage(ImageView imageView, String url, int size) { if (!Strings.isNullOrEmpty(url)) { Picasso.with(imageView.getContext()).load(url).resize(size, size).centerCrop().into(imageView); } }