2015-12-15 2 views
9

Я использую библиотеку привязки данных Android. У меня есть объект данных, расширяющийся BaseObservable.Android: привязка данных, notifyPropertyChanged() не работает?

public static class SimpleData extends BaseObservable implements Serializable { 
    private String text, subText; 
    private SpannableString totalText; 
@Bindable 
    public SpannableString getTotalText() { 
     return totalText; 
    } 

    public void setTotalText(SpannableString totalText) { 
     this.totalText = totalText; 
     notifyPropertyChanged(BR.totalText); 
    } 
} 

И мой XML является переплетены, а

<TextView 
       android:id="@+id/patient_name" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:layout_marginLeft="16dp" 
       android:layout_toRightOf="@+id/patient_image" 
       android:textColor="@color/primary_text" 
       android:text="@{object.getTotalText()}" 
       /> 

Связывание происходит для начальных значений. Но когда я меняю значение, используя

object.setTotalText(someSpannableString); 

Изменения не отражаются в текстовом виде. В чем может быть проблема?

+0

Вы можете решить вашу проблему сэр? –

+0

@mahdipishguy: Нет, сэр. Проблема еще не решена. – Ashwin

ответ

6

Использование названия поля вместо геттера.

<TextView 
       android:id="@+id/patient_name" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:layout_marginLeft="16dp" 
       android:layout_toRightOf="@+id/patient_image" 
       android:textColor="@color/primary_text" 
       android:text="@{object.totalText}"/> 
+0

кажется неправильным. Вы должны использовать класс 'BR' для идентификации поля _AND_, и аннотирование сеттера и геттера с помощью' @ Bindable' – LambergaR

1

У меня была такая же проблема. Моя привязка будет работать в первый раз, а затем не будет работать во второй раз.

У меня была идентичная установка, за исключением того, что я поставил @Bindable на мой сеттер, а не на мой метод getter.

Добавление @Bindable как для моего сеттера, так и для геттера исправил эту проблему для меня.

Когда я отлажены внутренние работники привязки данных библиотеки я заметил, что метод называется запросом повторной привязки не называют , потому что он сделал операцию, чтобы проверить, если поле было обновлено или не от последнее значение. Я предполагаю, что вам нужна аннотация для обоих методов , чтобы он мог сделать это внутреннее подтверждение, чтобы проверить, нужно ли его переписывать или нет.

Я не 100%, если это правда или нет, но аннотация для обоих методов исправила мою проблему. Глядя на документацию библиотеки привязки данных, я замечаю, что они просто показывают аннотацию на получателе.

Вы можете попробовать:

@Bindable 
public SpannableString getTotalText() { 
    return totalText; 
} 

@Bindable 
public void setTotalText(SpannableString totalText) { 
    this.totalText = totalText; 
    notifyPropertyChanged(BR.totalText); 
} 

Смотрите, если он решает проблему.