1.Cannot find the setter for attribute xxx
项目中的XML布局文件:
<ImageView
app:srcCompat=""/>
运行的时候报了以下错误:
* What went wrong:
Execution failed for task ':app:compileDebugJavaWithJavac'.
> android.databinding.tool.util.LoggedErrorException: Found data binding errors.
****/ data binding error ****msg:Cannot find the setter for attribute 'app:srcCompat' with parameter type int on android.widget.ImageView.
****\ data binding error ****
解决方案:
首先在app的目录下的build.gradle
中要加入apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-kapt'
必须定义@BindingMethods
注释,该注释将属性与ImageView中的相应setter相关联。
在Activity
或者Fragment
:
@BindingMethods(
BindingMethod(type = ImageView::class,
attribute = "app:srcCompat",
method = "setImageResource"))
class MainActivity: AppCompatActivity() {}
或者新建一个BindingMethods
类
@BindingMethods(
BindingMethod(type = ImageView::class,
attribute = "app:srcCompat",
method = "setImageResource"))
class MyBindingMethods
还有一种解决方案是:
@BindingAdapter("app:srcCompat")
* @JvmStatic fun srcCompat(view: ImageView, @DrawableRes drawableId: Int) {
* view.setImageResource(drawable)
* }
参考: https://stackoverflow.com/questions/35766898/data-binding-with-srccompat