目录
1. xml 中引用其它控件数据
2. 无法生成ViewDatabinding 类
2..2 在ViewModel 中,使用了@Bindable 修饰的函数,返回值为非boolean 类型的, 在函数名注意加上get
2.2 引用其它控件数据注意要写完整的getXXx, 如 username.getText()
2.3 为错误的控件添加了数据绑定
3. Unresolved reference: BR
4. 使用自定义属性时,提示没有找到 setter方法 (BindingAdapter的使用)
MVVM 中,xml 布局文件用到的大部分数据都是由ViewModel 提供, 也可以引用同一个xml 其它控件的数据,
如布局文件:
而函数 LoginViewModel. verify(String username, String password), 需要两个输入的字符串, xml 中使用了两个EditText 的文本。
参考官方文档: https://developer.android.com/topic/libraries/data-binding/expressions
boolean 返回值的函数名可以为 isXXXX(), 其它为 getXXX().
如果写成Koltin 的方式 xxx.text, 则会报以下错误:
错误: 找不到符号 FAILURE: Build failed with an exception. * What went wrong: |
猜测可能是由于当前加载布局文件的Activity 是用Java 语言写的,所以生成的AcitivityLoginUsingVmBindingImpl 也是Java, 因此要使用Java 的getText().
例如: 在Button 中, 引用了为 Image绑定的数据 如string url, 则也会导致无法生成
添加插件 'kotlin-kapt' 已经 开启 dataBinding
apply plugin: 'kotlin-kapt'
android {
dataBinding {
enabled = true
}
}
然后,Build -> clean project -> make Project, 接着把用到BR.xxx 的地方,先删掉,然后再敲入 RR. 这时会提示你导入哪一个
\app\build\generated\source\kapt\debug\com\example\xxxapp\BR.java
Cannot find a setter for
If a binding adapter provides the setter, check that the adapter is annotated correctly and that the parameter type matches.
1.布局文件(xml) 使用到的自定义属性(如app:xxxinfo),
确定使用了 BindingAdapter 注解声明(如 @BindingAdapter("xxxinfo"), 具体的函数名或者执行的操作则可以随意 ),
则在编译期间可以解释出这个属性
注意:
如何在自定义多个属性而正常使用其中的部分属性呢,
@BindingAdapter 注解还有一个参数 requireAll ,requireAll 默认为 true,表示必须使用全部属性,将其设置为 false 就可以正常使用部分属性
例如: @BindingAdapter(value = {"imageUrl", "placeholder", "error"},requireAll = false)
参考:https://juejin.cn/post/6844904186644004872