无法找到属性' app:vm'的GETTER值类型为布尔值

时间:2016-06-27 13:25:40

标签: java android data-binding android-databinding 2-way-object-databinding

我试图在自定义控件中使用本机双向Android数据绑定

所以我在xml

中有类似的东西
<layout>
<data>
<variable name="item" type="Boolean"/>
</data>
...
<my.control app:vm="@={item}"/>
...
</layout>

请注意,关于 @={} 的问题 - 本地双向绑定。

在代码中类似的东西:

class MyControl extends RelativeLayout{
...
@BindingAdapter("app:vm")
public static void setVm(View v, VM vm){...}
}

我的问题 - 如何为viewModel定义getter?我找不到任何关于它的指导。我尝试了不同的方法 - 编写自定义getter,静态getter但错误仍然相同。

2 个答案:

答案 0 :(得分:6)

取自here,&#34;滚动自己&#34;:

您需要更多额外的代码才能使双向数据绑定与自定义类一起使用。最重要的是,您需要定义@InverseBindingMethod

@InverseBindingMethods({
   @InverseBindingMethod(type = MyControl.class, attribute = "vm"),
})
  

在这种情况下,getter的名称与“app:vm。”的属性“getVm”的名称相匹配。(更改为您的示例)

请访问链接的博客 - 它包含有关该主题的更多信息,包括属性更改事件监听器的绑定。

答案 1 :(得分:0)

科林版本:

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()
}