"Auslösen eines DataLoad" ist Teil der Präsentationslogik. Daher sollte dies in ViewModel gehören.
Details über "Wie Daten geladen werden", z. B. Netzwerklogik, gehören nicht zur ViewModel-Ebene. Ich empfehle dringend, Retrofit zu verwenden, da Sie RxJava bereits verwenden.
Da rx.Observable
und databinding.ObservableField
sehr ähnlich sind, können Sie sie von einem Formular in ein anderes konvertieren. Ich habe eine library geschrieben, mit der Sie dies tun können. Eine Implementierung finden Sie unter FieldUtils.java.
entweder Wege, vorausgesetzt, Sie haben eine DataService
Schnittstelle/Klasse:
public interface DataService {
Observable<String> loadSomeData();
}
Sie Ihre Ansichtsmodell aufbauen können wie folgt:
public class ExampleViewModel {
ObservableField<String> title;
public ExampleViewModel(DataService dataService) {
this.title = FieldUtils.toField(dataService.loadSomeData());
}
}
Dann können Sie diese Anzeige in Ihre Ansicht mit Datenbindung syntax
<TextView
android:text="@{viewModel.title}" />
Ich vor kurzem gebloggt über die Verwendung von RxJava wi MVVM. Ich zeigte eine App, die mit Retrofit eine Liste von Ereignissen aus Github lädt und in einer RecyclerView anzeigt. Dies wurde in MVVM implementiert.
Artikel Link: MVVM using RxJava + Data Binding example: Loading data using Retrofit
Ein komplizierteres Beispiel, das auch eine Ladeanzeige und Fehler zeigt: DataLoadingViewModel.java.
Vielen Dank für Ihre Antwort Ich schätze es. Leider musste ich es auf eigene Faust lernen (ich brauchte nur ein paar Tage, um andere Projekte zu studieren). Zurück zur Antwort, ich benutze das Retrofit in meinem Projekt mit RxJava. Ich verstehe jetzt, dass ich Daten in das ViewModel laden muss und die Bindung durch es gesetzt wird. Aber ich bin mir zum Beispiel nicht sicher, ob es richtig ist, RecyclerView in der Ansicht (Aktivität) einzurichten. Auch ich würde gerne wissen, warum nicht @Bindable anstelle von ObservableField verwenden (auch wenn es zumindest für mich gleich ist), wenn es einen Unterschied gibt, lass es mich auch wissen. Vielen Dank noch mal :) – Bartando