Search code examples
androiddata-bindingkotlin

****/ data binding error ****msg:Cannot find the setter for attribute 'app:image_url' with parameter type java.lang.String on android.widget.ImageView


Getting stuck imageview databindig below are my custom adapter and Imageview. I refer to this [https://stackoverflow.com/questions/40188894/cannot-find-the-setter-for-attribute-with-parameter] but not getting solution - can anyone help? Thanks.

@BindingAdapter("app:image_url")
fun loadImage(view: ImageView, logoUrl: String?) {
    if (logoUrl == null) {
        view.setImageResource(R.drawable.alert_dark_frame)
    } else {
        Picasso.with(view.getContext())
            .load(logoUrl)
            .placeholder(R.mipmap.sym_def_app_icon)
            .into(view)
    }
}

<data>
    <import type="android.view.View" />
    <variable name="abc"
              type="com.example.viewmodel.Result"/>
</data>

<ImageView
            android:id="@+id/circleImageView"
            android:layout_width="100dp"
            android:layout_height="100dp"
            app:image_url="@{abc.picture.thumbnail}"
            />

Solution

  • This is normal error because the class ImageView doesn't contain a method setImageUrl, so you need to do a workaround for that by creating a class that extends ImageView and contains a method named setImageUrl that takes a String as parameter and set the image inside that method using Picasso library:

    public class MyImageView extends ImageView {
    
        // ... here is the constructors
        public void setImageUrl(String url) {
            Picasso.get().load(url).into(this);
        }
    }
    

    and after that you can use it in the xml like this:

    <com.yourPackage.MyImageView
        android:id="@+id/circleImageView"
        android:layout_width="100dp"
        android:layout_height="100dp"
        app:image_url="@{abc.picture.thumbnail}"
        />