У меня есть кнопка:
<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)
}
Это не работает, выдает следующую ошибку: «Не удается найтиустановщик для атрибута 'binding: firstStringParameter' с типом параметра java.lang.String для android.widget.Button. ".Однако, если я изменю binding:firstStringParameter="@{vm.userName}"
на, например, binding:firstStringParameter="my lovely string"
, это будет работать.
Имя пользователя в ViewModel равно val userName: String = "my name"
, и если я попытаюсь android:text="@{vm.userName}"
, это работает.Так что проблема в привязке данных.У меня есть другой проект, где я использовал тот же код, и он работает ... Звучит как ошибка в структуре привязки данных / adaperbinding, но, возможно, кто-то сталкивался с этой проблемой?
PS Я также пытался binding:firstStringParameter="@{
+ vm.userName}"
, не работает.
Глядя на автоматически сгенерированный класс Binding, я обнаружил очень странный код:
blah.setFormattedString(this.mboundView1, (java.lang.String)null, javaLangStringVmUserName);