Ответ 1
Просто добавьте String.valueOf():
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{String.valueOf(user.age)}"/>
Я пытаюсь использовать привязку данных. Он работает правильно, если я использую объект с атрибутом строки, но в этом случае я использую int, и он не работает. У меня есть объект Пользователь:
public class User extends BaseObservable{
public int age;
......
public User() {}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
...
}
вот мой макет
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="user" type="com.example.bindingview.User"/>
</data>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{user.age}"/>
</LinearLayout>
</layout>
Проблема заключается в том, что TextView не может иметь текст возраста, который является int. если я перехожу от атрибута int к атрибуту возраста, он работал нормально. Что делать, чтобы избежать этой проблемы?
Просто добавьте String.valueOf():
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{String.valueOf(user.age)}"/>
Слишком поздно, чтобы объяснить это. Но может быть, это поможет кому-то в будущем.
Мы не можем установить значение для TextView, кроме String
Класс реализации привязки данных Android пытается установить значение int для textview, что приводит к исключению ресурса not found с помощью этого метода setText(int)
.
Таким образом, чтобы установить значение типа int или значение с типом данных, отличным от String, нам нужно сначала преобразовать его в String, а затем установить значение для textview.
Существует так много способов преобразования значений в строки, как упомянуто выше, или вы можете объединить их с серьезным акцентом ('), как
android:text="@{' ' + user.age}"
или может использовать значение строкового ресурса для этого
android:text="@{@string/age(user.age)}"
а затем в файле string.xml
объявить значение этого строкового ресурса как
<string name="age">%d</string>