簡體   English   中英

****/ 數據綁定錯誤 ****msg:在 android.widget.ImageView 上找不到參數類型為 java.lang.String 的屬性“app:image_url”的設置器

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

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

您可以嘗試在 build.gradle (app) 文件中添加插件嗎

apply plugin: 'kotlin-kapt'

這是正常錯誤,因為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}"
    />

我剛從

應用程序:srcCompat

安卓:源代碼

在我的情況下,當它與數據綁定一起使用時。現在工作正常。希望這有幫助。

舊代碼

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

在模型類中編寫如下代碼

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM