2017-02-09 11 views
1

У меня проблема с библиотекой привязки Android. Когда я использую свойство changed '_all', все работает, но когда я указываю поле, он не работает. Мой вопрос: почему? :)Android Binding - изменение свойств

public class Person extends BaseObservable{ 
private String name; 

@Bindable 
public String getName(){ 
    return this.name; 
} 

//IT WORKS 
public void setName(String name){ 
    this.name = name; 
    notifyPropertyChanged(BR._all); //<- difference 
} 

//IT DONT WORK 
public void setSurname(String name){ 
    this.name = name; 
    notifyPropertyChanged(BR.name); //<- difference 
} 

И мой XML-файл:

<layout xmlns:android="http://schemas.android.com/apk/res/android"> 
<data> 
    <variable 
     name="person" 
     type="com.myapp.Person" /> 
</data> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@{person.getName()}" /> 

</LinearLayout> 
</layout> 

ответ

0

Проблема заключается в том, что вы используете метод GetName() вместо свойства name. Вы должны связать это следующим образом:

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@{person.name}" /> 

Причина, по которой _all работает потому, что связывание данных считает, что весь объект недействительные и перепроверены методы то, как хорошо.

+0

Хорошо, я замечаю это, но что, если я хочу использовать геттер? Пример изменения значения -> формат возврата («Ваше имя% s», имя); Единственный способ использовать все уведомления? – linean

+0

В этом конкретном случае вы хотите использовать форматирование строк: '@ {@ string/yourName (name)}'. Но если вы передадите аргумент, это также приведет к недействительности метода, поэтому вы можете использовать: '@ {MyStringFormatter.yourName (user.name)}' –

 Смежные вопросы

  • Нет связанных вопросов^_^