我已经创建了一个绑定适配器来显示带有毕加索的图片,但是它不起作用。我有以下错误:
发现数据绑定错误。 **** /数据绑定错误**** msg:找不到参数类型为java.lang.String的属性“ app:loadPicture”的设置器 android.widget.ImageView。 文件:/home/groupevsc.com/mathieu_labar/Documents/Projects/android-jetpack/app/src/main/res/layout/activity_detail_movie.xml loc:27:31-27:52 **** \数据绑定错误****
这是我的绑定适配器:
object CommonBindingUtil {
@JvmStatic
@BindingAdapter("loadPicture")
fun loadPicture(view: ImageView, text: String) {
Picasso.with(view.context)
.load(text)
.error(R.drawable.ic_movie_24)
.fit()
.placeholder(R.drawable.ic_movie_24)
.into(view)
}
}
我的XML具有属性“ app:loadPicture”:
<ImageView
android:id="@+id/picture"
android:layout_width="@dimen/material_image_simple_width"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:scaleType="fitXY"
android:src="@drawable/ic_movie_24"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:loadPicture="@{viewModel.movie.Poster}"/>
这是我的GitHub存储库: https://github.com/mlabar/android-jetpack/tree/tech_ajout_databinding
有人会解决我的问题吗?
谢谢!
答案 0 :(得分:16)
谢谢@Blackbelt解决我的问题,我在gradle中添加了“ kotlin-kapt”:
apply plugin: 'kotlin-kapt'
答案 1 :(得分:2)
这是我的代码
@JvmStatic
@BindingAdapter({"bind:loadPicture"})
fun loadPicture(view: ImageView, loadPicture: String) {
Picasso.with(view.context)
.load(loadPicture)
.error(R.drawable.ic_movie_24)
.fit()
.placeholder(R.drawable.ic_movie_24)
.into(view)
}
有关更多详细信息,请参见我在GitHub上的项目
答案 2 :(得分:0)
像这样更改您的 MovieViewModel 类:
class MovieViewModel(private val movie: Movie) : Observer, BaseObservable() {
init {
Movie.addObserver(this)
}
val Poster: String
@Bindable get() {
return Poster.name
}
}
和电影类是这样的:
class Movie: Observable() {
var Title: String = ""
set(value) {
field = value
setChangedAndNotify("Title")
}
var Year: String = ""
set(value) {
field = value
setChangedAndNotify("Year")
}
var imdbID: String = ""
set(value) {
field = value
setChangedAndNotify("imdbID")
}
var Type: String = ""
set(value) {
field = value
setChangedAndNotify("Type")
}
var Poster: String = ""
set(value) {
field = value
setChangedAndNotify("Poster")
}
var Plot: String = ""
set(value) {
field = value
setChangedAndNotify("Plot")
}
private fun setChangedAndNotify(field: Any) {
setChanged()
notifyObservers(field)
}
}
根据需要设置类上下文,然后运行它,希望可以解决您的问题。
答案 3 :(得分:0)
您没有为绑定适配器功能传递正确的参数。
对象CommonBindingUtil {
34.315.167.4:3000
}
此处@JvmStatic
@BindingAdapter("loadPicture")
fun loadPicture(view: ImageView, text: String) {
Picasso.with(view.context)
.load(text)
.error(R.drawable.ic_movie_24)
.fit()
.placeholder(R.drawable.ic_movie_24)
.into(view)
}
函数需要参数loadPicture
和一个字符串,但是在这里,您的xml中正在传递照片的对象
imageView
您应该改写这样的app:loadPicture="@{viewModel.movie.Poster}