Android Data Binding @bindingconversion failure for int to string
Столкнулся с загадочной проблемой при попытке сделать @BindingConversion для int в строку.
Следующий код работает для плавающих строк :
Xml:
...
<variable
name="myViewModel"
type="... .SomeModel" />
...
<TextView
style="@style/StyleStuff"
android:text="@{myViewModel.number}" />
Код:
public class SomeModel {
public ObservableFloat number = new ObservableFloat();
}
И установка:
viewModel.number.set(3.14f);
Но если я попробую то же самое для ints к строкам, я получу сбой.
public ObservableInt number = new ObservableInt();
С
viewModel.number.set(42);
Я получаю следующее:
FATAL EXCEPTION: main
Process: ...myapplication, PID: 14311
android.content.res.Resources$NotFoundException: String resource ID #0xfa0
at android.content.res.Resources.getText(Resources.java:1123)
at android.support.v7.widget.ResourcesWrapper.getText(ResourcesWrapper.java:52)
at android.widget.TextView.setText(TextView.java:4816)
at ...executeBindings(ActivityAdaptersBinding.java:336)
at android.databinding.ViewDataBinding.executePendingBindings(ViewDataBinding.java:355)
Есть идеи? Спасибо!
3 ответа:
android:text
с помощьюint
предполагается, чтоint
является строковым идентификатором ресурса. Используйтеandroid:text="@{Integer.toString(myViewModel.number)}"
.Вам также потребуется импортировать класс
Integer
:<layout> <data> <import type="java.lang.Integer" /> </data> <!-- rest of layout goes here --> </layout>
Преобразовать int в строку для набора в TextView, как показано ниже:
android:text="@{String.valueOf(myViewModel.number)}"
Кроме того, класс
String
должен быть импортирован макетом:<layout> <data> <import type="java.lang.String" /> </data> … </layout>
Самое простое решение, может быть, это кому-то поможет.
android:text="@{`` + model.number}"
Это также может быть использовано в двусторонней привязке для
EditText
. смотрите этот вопрос.