У меня возникла проблема с реализацией двусторонней привязки с типом данных Integer.
public class User {
private String firstName;
private String lastName;
private int age;
public User() {}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getFirstName() {
return this.firstName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getLastName() {
return this.lastName;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return this.age;
}
}
XML:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data class="UserDataBinding">
<variable
name="user"
type="com.databinding.model.User" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="@dimen/activity_horizontal_margin">
<EditText android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@={user.firstName}" />
<EditText android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@={user.lastName}" />
<EditText android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@={user.age}" />
</LinearLayout>
</layout>
К сожалению, это дает мне ошибку
«Ошибка: (52, 17) Не удается найти получатель для атрибута 'android: text' с типом значения java.lang.Integer в android.support.design.widget.TextInputEditText.»
Если я изменю текст атрибута на
<EditText android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@={Integer.toString(user.age)}" />
тогда я получаю сообщение об ошибке
«Ошибка: не удается создать привязки представлений java.lang.NullPointerException»
Цените любую помощь в этом.
ОБНОВЛЕНИЕ: похоже, возникла еще одна ошибка сразу после ошибки, упомянутой выше.
не может сгенерировать привязки представлений java.lang.NullPointerException
Не уверен, почему он дает мне NPE, хотя приложение еще не запущено.
Integer
наint
может решить эту проблему из-за автоматического преобразования сString
вint
или чего-то еще. Хакерский способ - сохранить возраст в виде String, а затем преобразовать его. - person Vucko   schedule 17.08.2016Integer
наObservableInteger
. Но тогда вам придется использовать метод.set(SOMENUMBER)
. См. этот пост для справки. Не забудьте использовать методInteger.toString()
, тогда - person Rittel   schedule 17.08.2016