**** /数据绑定错误**** msg:在android.widget.ImageView上找不到参数类型为java.lang.String的属性“ app:image_url”的设置器

时间:2019-01-13 12:36:55

标签: android data-binding kotlin

下面的获取卡住的imageview数据bindig是我的coustom适配器和Imageview。我指 这是[Cannot find the setter for attribute with parameter,但没有得到解决方案的人可以帮助您。

@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}"
            />

4 个答案:

答案 0 :(得分:4)

您可以尝试在build.gradle(应用程序)文件中添加插件

apply plugin: 'kotlin-kapt'

答案 1 :(得分:2)

这是正常错误,因为类ImageView不包含方法setImageUrl,因此您需要通过创建一个extends ImageView并包含方法的类来解决该问题名为setImageUrl并使用String作为参数,并使用Picasso库在该方法内设置图像:

public class MyImageView extends ImageView {

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

之后,您可以像这样在xml中使用它:

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

答案 2 :(得分:0)

在模型类中编写以下代码

 companion object DataBindingAdapter {
        @BindingAdapter("bind:image_url")
        @JvmStatic
        fun loadImage(imageView: ImageView, image_url: String) {
            Picasso.get().load(image_url).fit()
                    .placeholder(R.mipmap.ic_launcher)
                    .error(R.mipmap.ic_launcher)        
                    .into(imageView)        }
    }

在XML中编写以下代码

<ImageView
            android:id="@+id/movie_image"
            android:layout_width="100dp"
            android:layout_height="100dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.027"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:image_url="@{movieList.component5()}"/>

答案 3 :(得分:0)

我刚从

更改
  

app:srcCompat

  

android:src

就我而言,将其与数据绑定一起使用。现在可以正常工作。希望这会有所帮助。

旧代码

<androidx.appcompat.widget.AppCompatImageView
                android:layout_width="80dp"
                android:layout_height="80dp"
                android:textSize="16sp"
                android:fontFamily="@font/avenir_roman"
                android:textColor="@color/textColor"
                app:srcCompat="@{model.image}"/>

新代码

  <androidx.appcompat.widget.AppCompatImageView
                    android:layout_width="80dp"
                    android:layout_height="80dp"
                    android:textSize="16sp"
                    android:fontFamily="@font/avenir_roman"
                    android:textColor="@color/textColor"
                    android:src="@{model.image}"/>