【问题标题】:BindingAdapter doesn't work with DataBindingBindingAdapter 不适用于 DataBinding
【发布时间】:2019-02-16 02:21:12
【问题描述】:

我有一个按钮:

<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}",那就可以了。 所以问题出在数据绑定上。我有另一个项目,我使用相同的代码并且它可以工作......听起来像数据绑定/adaperbinding框架中的一个错误,但也许有人遇到过这个问题?

附: 我也试过binding:firstStringParameter="@{+ vm.userName}",还是不行。

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

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

【问题讨论】:

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


    【解决方案1】:

    好的,图书馆坏了。我找到了解决方案。 只有当两个参数都是硬编码字符串或从 ViewModel 传递时,它才会起作用。

    那么,那

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

    这很有效:

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

    ,但这不起作用:

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

    【讨论】:

    • 谢谢!.. 它节省了我很多时间
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-06
      • 1970-01-01
      • 2016-06-30
      相关资源
      最近更新 更多