Durch die Beispiele sah ich 2 Ansätze zu MVVM mit Android Architecture Components.Best Practices und Muster in ViewModel + Data Binding. Ist ObservableField in ViewModel in Ordnung?
Erster Ansatz:
ViewModel
bietetLiveData
Activity
abonniertLiveData
- Wenn Beobachter genannt
Activity
Daten anViewModel
ObservableField
Einstellung. - Ganze
ViewModel
wird an die Bindung übergeben. In
xml
Sie setzen nurObservableField
als Wert<ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" app:visibleGone="@{viewmodel.listLoading}"/> <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/swiperefresh" android:layout_width="match_parent" android:layout_height="match_parent" app:refreshing="@{viewmodel.listRefreshing}" app:onRefreshListener="@{() -> viewmodel.refreshList()}" app:visibleGone="@{!viewmodel.listLoading}">
Vorteile: Ich brauche keinen Zustand zu übergeben (zum Beispiel "Laden"), wie ich listLoading
ObservableField
in ViewModel
aktualisieren, diese:
val listLoading = ObservableBoolean(false)
/** other observable fields go here **/
val list: MutableLiveData<List<Item>> = MutableLiveData()
fun loadList() {
listLoading.set(true)
repo.getList { items ->
list.value = items
listLoading.set(false)
}
}
Nachteile: Gibt es Nachteile bei diesem Ansatz?
Zweiter Ansatz:
ViewModel
bietetLiveData
Activity
abonniertLiveData
- Wenn Beobachter genannt
Activity
Bindung - nur benötigt Objekt (pojo) geleitet wird, übergeben
Pros: Alle Vorteile dieses Ansatzes?
Nachteile: Status sollte von ViewModel
zurückgegeben werden. In diesem sample from Google Daten sind in Resource
Objekt verpackt.
erster Ansatz ist in another sample app from Google
verwendet würde ich gerne wissen, was Vor- und Nachteile beider Muster von den Entwicklern mit mehr Erfahrung arbeitet mit Android Data Binding und Android Arch Komponenten.
Irgendwelche letzte Wort zu dieser Frage? Ich möchte den 2. Ansatz verwenden, aber immer noch verwirrt. Irgendeine Hilfe?? – iMDroid