2016-07-12 14 views
1

Ich versuche die Datenbindungsfunktion für Android und es scheint, dass die Observable-Felder die Änderung nicht an die Benutzeroberfläche weitergeben.ObservableField gibt keine Änderungen aus

Wenn ich die BaseObservable Klasse erweitern funktioniert alles wie geplant, aber wenn ich zu ObservableBoolean oder ObservableField wechseln die Daten ändert, aber es wird nicht an die Benutzeroberfläche weitergegeben.

das Modell

public class User { 
    public final ObservableBoolean tapped = new ObservableBoolean(false); 

    public boolean isTapped() { 
     return tapped.get(); 
    } 

    public void setTapped(boolean tapped) { 
     this.tapped.set(tapped); 
    } 
} 

das Layout

<layout 
    <data> 
     <variable 
      name="user" 
      type="User"/> 
      .... 
    </data> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:background="@{user.tapped ? @color/colorAccent : @color/white}" 
     android:onClick="@{() -> user_holder.onClickTest(user)}"> 

     ...... 
    </LinearLayout> 
</layout> 

Irgendwelche Ideen?

Antwort

2

Es sieht so aus, als ob Sie das schlechte Datenbindungssystem verwechselt haben. Sie haben nicht nur ein öffentliches Feld, sondern auch Getter und Setter. Android Data Binding versucht zuerst, an den Getter zu binden, und wenn das fehlschlägt, bindet er sich an das Feld. Wenn Sie den Namen des in den Methoden verwendeten Namens ändern (z. B. isPersonTapped(), setPersonTapped(...)), haben Sie kein Problem. Da Sie die Zugriffsmethoden haben, können Sie auch selbst ein eigenes Feld und benachrichtigen die Änderung nutzen könnten:

die Getter und Setter
public class User extends BaseObservable { 
    private boolean tapped = false; 

    @Bindable 
    public boolean isTapped() { 
     return tapped; 
    } 

    public void setTapped(boolean tapped) { 
     this.tapped = tapped; 
     notifyPropertyChanged(BR.tapped); 
    } 
} 
+0

Es war, ich tat sie, funktioniert nun gut, danke! – Bri6ko

Verwandte Themen