BindingAdapter不适用于DataBinding [英] BindingAdapter doesn't work with DataBinding

查看:215
本文介绍了BindingAdapter不适用于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如下所示:

The BindingAdapter looks as follows:

@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",这将起作用.

This doesn't work, it gives the following error: "Cannot find the setter for attribute 'binding:firstStringParameter' with parameter type java.lang.String on android.widget.Button.". However, if I change binding:firstStringParameter="@{vm.userName}" to, for example, binding:firstStringParameter="my lovely string" this will work.

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

The userName in the ViewModel is val userName: String = "my name" and if I try android:text="@{vm.userName}" that works. So the problem is in the databinding. I've got another project where I used the same code and it works... Sounds like a bug in the databinding/adaperbinding framework, but maybe someone came across this problem?

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

P.S. I also tried binding:firstStringParameter="@{ + vm.userName}", did not work.

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

By looking at the autogenerated Binding class I discovered a very strange code:

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

推荐答案

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

Ok, the library is broken. I found a solution. It will only work if both parameters are either hardcoded strings OR are passed from the ViewModel.

所以

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

并且可行:

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

,但这不起作用:

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

这篇关于BindingAdapter不适用于DataBinding的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆