找不到值类型为布尔值的属性 'app:vm' 的 GETTER
Cannot find the GETTER for attribute 'app:vm' with value type Boolean
我正在尝试在我的自定义控件中使用本机 2 向 android 数据绑定
所以我在 xml
中有类似的东西
<layout>
<data>
<variable name="item" type="Boolean"/>
</data>
...
<my.control app:vm="@={item}"/>
...
</layout>
请注意,这是关于 @={}
- 本机 2 向绑定的问题。
以及代码中的类似内容:
class MyControl extends RelativeLayout{
...
@BindingAdapter("app:vm")
public static void setVm(View v, VM vm){...}
}
我的问题 - 我应该如何为我的 viewModel 定义 getter?我找不到任何关于它的指导。我尝试了不同的方法 - 编写自定义 getter、静态 getters 但错误仍然相同。
摘自 here,在 "Rolling Your Own" 下:
您需要更多额外的代码才能使双向数据绑定与自定义 类 一起工作。最重要的是,您需要定义一个 @InverseBindingMethod
:
@InverseBindingMethods({
@InverseBindingMethod(type = MyControl.class, attribute = "vm"),
})
In this case, the name of the getter matches the name of the attribute “getVm” for “app:vm.” (Changed to your example)
请访问链接的博客 - 它有关于该主题的更多信息,包括属性更改事件侦听器的绑定。
Kotlin 版本:
object DataBindingUtil {
@BindingAdapter("emptyIfZeroText") //use this instead "android:text"
@JvmStatic
fun setText(editText: EditText, text: String?) {
if (text == "0" || text == "0.0") editText.setText("") else editText.setText(text)
}
@InverseBindingAdapter(attribute = "emptyIfZeroText", event = "android:textAttrChanged")
@JvmStatic
fun getText(editText: EditText) = editText.text.toString()
}
我正在尝试在我的自定义控件中使用本机 2 向 android 数据绑定
所以我在 xml
中有类似的东西<layout>
<data>
<variable name="item" type="Boolean"/>
</data>
...
<my.control app:vm="@={item}"/>
...
</layout>
请注意,这是关于 @={}
- 本机 2 向绑定的问题。
以及代码中的类似内容:
class MyControl extends RelativeLayout{
...
@BindingAdapter("app:vm")
public static void setVm(View v, VM vm){...}
}
我的问题 - 我应该如何为我的 viewModel 定义 getter?我找不到任何关于它的指导。我尝试了不同的方法 - 编写自定义 getter、静态 getters 但错误仍然相同。
摘自 here,在 "Rolling Your Own" 下:
您需要更多额外的代码才能使双向数据绑定与自定义 类 一起工作。最重要的是,您需要定义一个 @InverseBindingMethod
:
@InverseBindingMethods({
@InverseBindingMethod(type = MyControl.class, attribute = "vm"),
})
In this case, the name of the getter matches the name of the attribute “getVm” for “app:vm.” (Changed to your example)
请访问链接的博客 - 它有关于该主题的更多信息,包括属性更改事件侦听器的绑定。
Kotlin 版本:
object DataBindingUtil {
@BindingAdapter("emptyIfZeroText") //use this instead "android:text"
@JvmStatic
fun setText(editText: EditText, text: String?) {
if (text == "0" || text == "0.0") editText.setText("") else editText.setText(text)
}
@InverseBindingAdapter(attribute = "emptyIfZeroText", event = "android:textAttrChanged")
@JvmStatic
fun getText(editText: EditText) = editText.text.toString()
}