Подтвердить что ты не робот

Связывание данных: ресурсы $NotFoundException, когда атрибут объекта int

Я пытаюсь использовать привязку данных. Он работает правильно, если я использую объект с атрибутом строки, но в этом случае я использую 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 к атрибуту возраста, он работал нормально. Что делать, чтобы избежать этой проблемы?

4b9b3361

Ответ 1

Просто добавьте String.valueOf():

         <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@{String.valueOf(user.age)}"/>

Ответ 2

Слишком поздно, чтобы объяснить это. Но может быть, это поможет кому-то в будущем.
Мы не можем установить значение для 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>