【问题标题】:****/ data binding error ****msg:Cannot find the setter for attribute 'app:image_url' with parameter type java.lang.String on android.widget.ImageView****/ 数据绑定错误 ****msg:在 android.widget.ImageView 上找不到参数类型为 java.lang.String 的属性“app:image_url”的设置器
【发布时间】:2019-06-07 16:45:46
【问题描述】:

下面卡住的 imageview databindig 是我的自定义适配器和 Imageview。我参考了这个 [https://stackoverflow.com/questions/40188894/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}"
            />

【问题讨论】:

  • 如果您从绑定适配器中删除app: 是否有效?
  • 是的,我试过但没有用

标签: android data-binding kotlin


【解决方案1】:

您可以尝试在您的 build.gradle (app) 文件中添加插件

apply plugin: 'kotlin-kapt'

【讨论】:

  • 通过使用这个我在数据绑定生成的类中遇到了问题
  • 您遇到了什么问题?
  • 抱歉回复晚了,我在使用 kotlin-kapt 插件 ActivityMain2Binding(DataBindingComponent _bindingComponent, View _root, ^ symbol: class DataBindingComponent location: class ActivityMain2Binding
  • 我遇到了一个问题,我在 build.gradle 中添加了应用插件:'kotlin-kapt',工作正常。在我添加这一行之前,它甚至不会在整个项目中生成@BindingAdapter attr。非常感谢
【解决方案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}"
    />

【讨论】:

  • 我发现的一种方法是我在下面的 onBindViewHolderlike 中使用毕加索(我知道这不是正确的方法) Picasso.with(c) .load(holder.binding.abc!!.picture.medium ) .placeholder(R.mipmap.ic_launcher) 它解决了我的临时问题。 .into(holder.binding.circleImageView)
  • 我认为当我们为小部件创建自定义属性时,我们只需要声明 BindingAdapter 或 InverseBindingAdapter。看来我们还需要将小部件本身扩展为一个类并声明那些 get/set 方法?
【解决方案3】:

我刚变了

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

【讨论】:

    【解决方案4】:

    在模型类中编写如下代码

     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()}"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-29
      • 2015-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-05
      • 1970-01-01
      • 2017-06-29
      相关资源
      最近更新 更多