En regardant à travers les échantillons, j'ai vu 2 approches de MVVM utilisant Android Architecture Components.Meilleures pratiques et modèles dans ViewModel + Data Binding. ObservableField dans ViewModel est-il correct?
Première approche:
ViewModel
fournitLiveData
Activity
est abonnée àLiveData
- Lorsque observateur appelé
Activity
est la mise en données àViewModel
ObservableField
. - L'intégralité
ViewModel
est passée à la liaison. En
xml
que vous venez deObservableField
en tant que valeur<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}">
Avantages: Je ne ai pas besoin de passer l'état (par exemple le "chargement"), comme je mets à jour listLoading
ObservableField
en ViewModel
comme ceci:
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)
}
}
Moins: Y a-t-il des inconvénients dans cette approche?
Deuxième approche:
ViewModel
fournitLiveData
Activity
est abonnée àLiveData
- Quand observateur a appelé
Activity
est passé à la liaison - est passé à la liaison
Pour: Des avantages de cette approche?
Contre: L'état doit être renvoyé à partir de ViewModel
. Dans ce sample from Google les données sont enveloppées dans l'objet Resource
.
Première approche est utilisée dans another sample app from Google
Je voudrais savoir quels sont les avantages et les inconvénients des deux modèles de développeurs plus expérimentés travaillant avec liaison de données Android et composants arqués Android.
Un dernier mot sur cette question? Je veux utiliser la 2ème approche mais toujours confus. De l'aide?? – iMDroid