web-dev-qa-db-fra.com

Afficher la boîte de dialogue de ViewModel dans Android Architecture MVVM

À propos de MVVM avec de nouveaux composants d'architecture, j'ai une question, comment dois-je implémenter si mon application doit afficher par exemple un dialogue avec 3 options d'une action qui s'est produite dans ma machine virtuelle? Qui est responsable de l'envoi à Activity/Fragment de la commande pour afficher la boîte de dialogue?

22
lucasb.aquino

Les actions liées à l'interface utilisateur telles que l'ouverture de nouvelles activités ou l'affichage de boîtes de dialogue sont déclenchées à partir de la vue (une activité ou un fragment), et non à partir d'un ViewModel. Le ViewModel n'a pas de référence à la vue pour éviter les fuites et garder la couche de présentation "réactive".

Vous pouvez souscrire votre vue (activité ou fragment) à une observable dans le ViewModel afin que, lorsqu'elle change, vous pouvez démarrer votre boîte de dialogue ou une nouvelle activité à partir de la vue.

Edit: J'ai écrit un article à ce sujet car ce n'est pas simple. Une bonne approche consiste à modéliser les événements dans le cadre de votre état et à utiliser un wrapper d'événement pour des actions telles que la navigation: https://medium.com/google-developers/livedata-with-snackbar-navigation-and-other- events-the-singleliveevent-case-ac262267315

34
Jose Alcérreca