【问题标题】:Why my data-binding annotation(@BindingAdapter("imageURL")) doesn't work?为什么我的数据绑定注解(@BindingAdapter("imageURL")) 不起作用?
【发布时间】:2021-04-09 22:07:06
【问题描述】:

我已经编写了我的自定义 recyclerView 并且遇到了问题。但是当我写一个注释来为我的 imageView 标记一个 setter 时,我得到了一个编译错误。 这是源代码和错误。

错误:
找不到接受参数类型“java.lang.String”的 的设置器
如果绑定适配器提供了设置器,请检查适配器是否正确注释以及参数类型是否匹配。

设置器代码:

import android.widget.ImageView
import androidx.databinding.BindingAdapter
import com.squareup.picasso.Callback
import com.squareup.picasso.Picasso
import java.lang.Exception

class BindingAdapters {
    @BindingAdapter("imageURL")//compilation error
    fun setImageURL(imageView: ImageView, URL: String?) {
        imageView.alpha = 0f
        try {
            Picasso.get().load(URL).noFade().into(imageView, object : Callback {
                override fun onSuccess() {
                    imageView.animate().setDuration(300).alpha(1f).start()
                }
                override fun onError(e: Exception) {
                }
            })
        } catch (ignored: Exception) {
        }

    }
}

ImageView xml 代码:

 <data>

        <variable
            name="eventShow"
            type="course.ru.qsearcher.models.Event" />
    </data>
........
 <com.makeramen.roundedimageview.RoundedImageView
            android:id="@+id/imageEvent"
            android:layout_width="@dimen/_70sdp"
            android:layout_height="@dimen/_100sdp"
            android:layout_marginStart="@dimen/_10sdp"
            app:imageURL="@{eventShow.imagePath}"
            android:scaleType="centerCrop"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:riv_corner_radius="@dimen/_4sdp" />

Event 是一个数据类,包含一些字段,例如事件的标题、描述、图像 URL 等。

сode

xml usage

url-field

【问题讨论】:

  • 请不要将问题格式化为链接。
  • 请尽可能用完整的代码块重新表述所有内容。即使它有点长尤其是,因为你的链接是图片。

标签: android-databinding 2-way-object-databinding imageurl


【解决方案1】:

android:imageURL更改为imageURLandroid:前缀用于android:text等内置属性。

并像imageURLapp:imageURL 一样在您的ImageView 中使用它。

【讨论】:

  • @alf3ratz 当您使用该属性时还删除=,我猜您不需要2路绑定。
【解决方案2】:

我没有将 Kotlin 插件添加到我的 gradle 文件中

apply plugin: "kotlin-kapt"

这解决了我的问题

【讨论】:

    猜你喜欢
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 2021-07-24
    • 2011-01-16
    • 2017-06-24
    • 1970-01-01
    相关资源
    最近更新 更多