Aktualisieren der UI mithilfe der Datenbindungsbibliothek

8

Kontext:

Ich verwende v1.0-rc1 der neuen Datenbindungsbibliothek .

Ich habe das folgende Ansichtsmodell:

%Vor%

Dieses Ansichtsmodell wird an ein Fragment übergeben und in einer Instanzvariablen gespeichert. Das View-Modell wird dann an ein Layout im% code_% -Rückruf des Fragments gebunden (hier ist onCreateView ein leeres headerView ):

%Vor%

In regelmäßigen Abständen wird FrameLayout aufgerufen und der aktuelle Standort des Benutzers übergeben:

%Vor%

Aktuelles Verhalten:

Die Benutzeroberfläche zeigt den Abstand viewModel.setCurrentLocation korrekt an, wenn jedes String zuerst erstellt wird. Die Benutzeroberfläche zeigt den Abstand Fragment korrekt an, wenn ein String neu erstellt wird (diese Fragmente leben in Fragment .

Die Benutzeroberfläche wird NICHT aktualisiert, wenn ViewPager mit einem neuen Speicherort aufgerufen wird.

Gewünschtes Verhalten:

Die Benutzeroberfläche wird jedes Mal aktualisiert, wenn viewModel.setCurrentLocation mit einem neuen Speicherort aufgerufen wird.

Sachen, die ich bisher angeschaut habe:

Soweit ich das beurteilen kann, soll das View-Modell viewModel.setCurrentLocation implementieren (in diesem Fall über extending Observable ) die Benutzeroberfläche automatisch aktualisieren, wenn BaseObservable aufgerufen wird. Zumindest, wenn ich mir die Android-Dokumentation für die Datenbindung anschaue , das ist die Botschaft, die ich habe wegnehmen.

Die Klasse notifyPropertyChanged verwaltet eine private Liste von BaseObservable s. Wenn ich einen Debug-Haltepunkt für die OnPropertyChangedCallback -Methode festlege:

%Vor%

Ich sehe, dass BaseObservable.notifyPropertyChanged immer zur Laufzeit mCallbacks ist. Vermutlich ruft das generierte Datenbindungsstuff null nicht auf, um ein BaseObservable.addOnPropertyChangedCallback bereitzustellen, das Komponenten automatisch verbindet. Bedeutet das, dass ich es manuell machen muss? Das scheint eine Menge von dem Punkt der Datenbindungsbibliothek zu besiegen.

    
stkent 18.09.2015, 17:52
quelle

2 Antworten

4

Hallo, das hat bei mir funktioniert. Ich musste es als Antwort aus Mangel an genügend Kredit posten.

%Vor%

Und Layoutdatei:

%Vor%     
subhash 25.09.2015, 10:05
quelle
0

Ich denke, Sie sollten Flag wie isAdded () oder isLocationUpdated () in Ihrem XML verwenden:

%Vor%     
Ivan V 01.10.2015 13:34
quelle

Tags und Links