Ale*_*lex 3 data-binding android 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}"
.../>
...
Run Code Online (Sandbox Code Playgroud)
BindingAdapter 如下所示:
@BindingAdapter("binding:singleParameterString", "binding:firstStringParameter")
fun setFormattedString(btn: Button, singleParameterString: String, firstStringParameter: String) {
btn.text = String.format(singleParameterString, firstStringParameter)
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,它给出了以下错误:“在 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}"这样做。所以问题出在数据绑定上。我有另一个项目,我使用了相同的代码并且它可以工作......听起来像是数据绑定/适配器绑定框架中的一个错误,但也许有人遇到了这个问题?
PS我也试过binding:firstStringParameter="@{ + vm.userName}",没用。
通过查看自动生成的 Binding 类,我发现了一个非常奇怪的代码:
blah.setFormattedString(this.mboundView1, (java.lang.String)null, javaLangStringVmUserName);
Run Code Online (Sandbox Code Playgroud)
好吧,图书馆坏了。我找到了解决方案。只有当两个参数都是硬编码字符串或从 ViewModel 传递时,它才会起作用。
以便
binding:firstStringParameter="@{vm.
binding:singleParameterString="@{vm.test}"
Run Code Online (Sandbox Code Playgroud)
这有效:
binding:firstStringParameter="userName"
binding:singleParameterString="test"
Run Code Online (Sandbox Code Playgroud)
,但这不起作用:
binding:firstStringParameter="@{vm.userName}"
binding:singleParameterString="test"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1369 次 |
| 最近记录: |