BindingAdapter不适用于DataBinding

时间:2018-09-11 14:30:21

标签: android data-binding kotlin android-binding-adapter

我有一个按钮:

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

这不起作用,它给出以下错误:“在android.widget.Button上找不到参数类型为java.lang.String的属性'binding:firstStringParameter'的设置器。”。 但是,如果我将binding:firstStringParameter="@{vm.userName}"更改为binding:firstStringParameter="my lovely string",则可以使用。

ViewModel中的用户名是val userName: String = "my name",如果我尝试使用android:text="@{vm.userName}"则可以。 因此,问题在于数据绑定。我在另一个项目中使用了相同的代码,并且可以正常工作……听起来像数据绑定/自动绑定框架中的错误,但是也许有人遇到了这个问题?

P.S。 我还尝试了binding:firstStringParameter="@{ + vm.userName}",但是没有用。

通过查看自动生成的Binding类,我发现了一个非常奇怪的代码:

blah.setFormattedString(this.mboundView1, (java.lang.String)null, javaLangStringVmUserName);

2 个答案:

答案 0 :(得分:1)

好的,该库已损坏。我找到了解决方案。 仅当两个参数均为硬编码字符串或从ViewModel传递时,该参数才起作用。

所以

binding:firstStringParameter="@{vm.
binding:singleParameterString="@{vm.test}"

并且可行:

 binding:firstStringParameter="userName"
 binding:singleParameterString="test"

,但这不起作用:

 binding:firstStringParameter="@{vm.userName}"
 binding:singleParameterString="test"

答案 1 :(得分:0)

我找到了解决此问题的方法:

binding:firstStringParameter="@{notification.user.pic}"
binding:singleParameterString="@{`test`}"