6
votes

Différent entre ViewModel avec LiveData et ViewModel sans LiveData?

J'ai lu de nombreux tutoriels sur viewmodel et livingata, mais je n'utilise pas réellement livingata dans la classe viewmodel dans le modèle mvvm. Merci d'avance.


1 commentaires

Si vous avez besoin d'observer l'état d'un objet, vous avez besoin de LiveData . Il n'y a aucune différence, je suppose que tout est question d'exigence et de bonnes pratiques.


3 Réponses :


0
votes

Le modèle MVVM consiste uniquement à parler V -> VM -> M et à réagir M -> VM -> V. Cela signifie que la vue peut appeler des méthodes sur le ViewModel mais que le ViewModel n'a pas de référence à la vue pour appeler des méthodes dessus (définition des données). La façon de communiquer du ViewModel à la vue est par la vue en observant une variable (ObservableField, LiveData, RxJava, etc.).

LiveData est un excellent objet observable pour fournir une communication entre le viewModel et la View en particulier sur les changements d'état comme la rotation. Il fournit également une excellente communication entre le modèle et la vue en ce qui concerne les changements de base de données et la pièce.


0 commentaires

4
votes

Selon Google Docs, si vous utilisez déjà une bibliothèque comme Rx ou Agera, vous pouvez continuer à les utiliser au lieu de LiveData. Mais dans ce cas, il est de votre responsabilité de gérer l'allocation et la désallocation d'objets par cycle de vie des composants Android.

Lorsque vous travaillez avec un modèle MVVM, étant donné que viewmodel n'a aucune référence à afficher, vous aurez besoin d'un support de données observable pour observer les changements afin de pouvoir mettre à jour correctement votre vue.

Dans ce cas, vous pouvez utiliser liveata, l'un des composants de l'architecture ou tout autre observable comme celui de Rx.

La principale différence est que livesata respecte le cycle de vie d'Android et les observables rx ne le font pas.

Avec livesata, il n'y aurait pas de plantage en raison de l'arrêt de l'activité lors de l'appel de onChange car il est conscient du cycle de vie. Mais sans liveata, c'est à vous de gérer ce cas.


0 commentaires

3
votes

Les développeurs Android utilisent couramment ViewModel comme conteneur de LiveData comme celui-ci

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    viewModel = ViewModelProviders.of(this)[MyViewModel::class.java]
    viewModel.myLiveData.observe(this, Observer {
        textView.text = it
    })

Mais pourquoi n'utilisons-nous pas directement la classe String ?

model.myLiveData.postValue("Echo")

model.myLiveData.observe(this, Observer {
    // Show "Echo"
    toast(it)
})

Parce que nous voulons utiliser le modèle Observer pour la chaîne.

class MyViewModel {
    val myString = "Hello"
}

Pourquoi avons-nous besoin de ViewModel alors? Parce que nous voulons obtenir la même instance de ViewModel (singleton) sur notre activité ou fragment.

class MyViewModel {
    val myLiveData = MutableLiveData<String>()
}

Je pense que cela devrait être suffisant pour commencer à voir la différence entre ViewModel et LiveData.

Différence entre ViewModel avec LiveData et ViewModel sans LiveData?

C'est à vous de décider, avez-vous besoin d'un LiveData sur un ViewModel ou pas?

Je n'utilise pas réellement livingata dans la classe viewmodel dans le modèle mvvm.

Après avoir compris la différence entre ViewModel et LiveData, veuillez en savoir plus sur le modèle MVVM.

Le modèle de vue dans Model-View-View-Model n'est pas le même que ViewModel de Jetpack et Données en direct. View Model dans MVVM est un concept, vous pouvez créer votre propre View Model en utilisant la classe Java normale. Tant qu'il est conforme au comportement MVVM.


0 commentaires