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
):
In regelmäßigen Abständen wird FrameLayout
aufgerufen und der aktuelle Standort des Benutzers übergeben:
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:
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.
Tags und Links android android-databinding