BindingAdapter 不适用于 DataBinding
BindingAdapter doesn't work with DataBinding
我有一个按钮:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:binding="http://schemas.android.com/tools">
<data>
<variable
name="vm"
type="com.MyViewModel" />
</data>
<Button
binding:singleParameterString="test"
binding:firstStringParameter="@{vm.userName}"
.../>
...
BindingAdapter 如下所示:
@BindingAdapter("binding:singleParameterString", "binding:firstStringParameter")
fun setFormattedString(btn: Button, singleParameterString: String, firstStringParameter: String) {
btn.text = String.format(singleParameterString, firstStringParameter)
}
这不起作用,它给出了以下错误:"Cannot find the setter for attribute 'binding:firstStringParameter' with parameter type java.lang.String on android.widget.Button."。
但是,如果我将 binding:firstStringParameter="@{vm.userName}"
更改为 binding:firstStringParameter="my lovely string"
,这将起作用。
ViewModel 中的用户名是 val userName: String = "my name"
,如果我尝试 android:text="@{vm.userName}"
就可以了。
所以问题出在数据绑定中。我有另一个项目,我使用了相同的代码并且它可以工作...听起来像是 databinding/adaperbinding 框架中的错误,但也许有人遇到过这个问题?
P.S。
我也试过binding:firstStringParameter="@{
+ vm.userName}"
,没用
通过查看自动生成的绑定 class 我发现了一个非常奇怪的代码:
blah.setFormattedString(this.mboundView1, (java.lang.String)null, javaLangStringVmUserName);
好的,图书馆坏了。我找到了解决办法。
它仅在两个参数都是硬编码字符串或从 ViewModel 传递时才有效。
所以,
binding:firstStringParameter="@{vm.
binding:singleParameterString="@{vm.test}"
这很有效:
binding:firstStringParameter="userName"
binding:singleParameterString="test"
,但这不起作用:
binding:firstStringParameter="@{vm.userName}"
binding:singleParameterString="test"
我找到了解决此问题的方法:
binding:firstStringParameter="@{notification.user.pic}"
binding:singleParameterString="@{`test`}"
我有一个按钮:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:binding="http://schemas.android.com/tools">
<data>
<variable
name="vm"
type="com.MyViewModel" />
</data>
<Button
binding:singleParameterString="test"
binding:firstStringParameter="@{vm.userName}"
.../>
...
BindingAdapter 如下所示:
@BindingAdapter("binding:singleParameterString", "binding:firstStringParameter")
fun setFormattedString(btn: Button, singleParameterString: String, firstStringParameter: String) {
btn.text = String.format(singleParameterString, firstStringParameter)
}
这不起作用,它给出了以下错误:"Cannot find the setter for attribute 'binding:firstStringParameter' with parameter type java.lang.String on android.widget.Button."。
但是,如果我将 binding:firstStringParameter="@{vm.userName}"
更改为 binding:firstStringParameter="my lovely string"
,这将起作用。
ViewModel 中的用户名是 val userName: String = "my name"
,如果我尝试 android:text="@{vm.userName}"
就可以了。
所以问题出在数据绑定中。我有另一个项目,我使用了相同的代码并且它可以工作...听起来像是 databinding/adaperbinding 框架中的错误,但也许有人遇到过这个问题?
P.S。
我也试过binding:firstStringParameter="@{
+ vm.userName}"
,没用
通过查看自动生成的绑定 class 我发现了一个非常奇怪的代码:
blah.setFormattedString(this.mboundView1, (java.lang.String)null, javaLangStringVmUserName);
好的,图书馆坏了。我找到了解决办法。 它仅在两个参数都是硬编码字符串或从 ViewModel 传递时才有效。
所以,
binding:firstStringParameter="@{vm.
binding:singleParameterString="@{vm.test}"
这很有效:
binding:firstStringParameter="userName"
binding:singleParameterString="test"
,但这不起作用:
binding:firstStringParameter="@{vm.userName}"
binding:singleParameterString="test"
我找到了解决此问题的方法:
binding:firstStringParameter="@{notification.user.pic}"
binding:singleParameterString="@{`test`}"