Show Dialog from ViewModel in Android MVVM Architecture
UI-related actions like opening new activities or showing dialogs are triggered from the view (an activity or fragment), not from a ViewModel. The ViewModel doesn't have a reference to the view to prevent leaks and keep the presentation layer "reactive".
You can subscribe your view (activity or fragment) to an observable in the ViewModel so that when it changes, you can start your dialog or new activity from the view. Then the view resets that state in the ViewModel when it's dealt with.
Edit: We wrote official guidance for this: https://developer.android.com/topic/architecture/ui-layer/events
lucasb.aquino
Updated on December 18, 2021Comments
-
lucasb.aquino over 2 years
About MVVM with new architecture components, I've a question, how should I implement if my app needs to display for example a Dialog with 3 options from some action that happened in my VM? Who is responsible for sending to Activity/Fragment the command to show dialog?
-
lucasb.aquino almost 7 yearsWhat I'm doing is creating a LiveData <Boolean> for every action I need to be triggered in my View to call a new screen or display dialog, but I'm not satisfied with that solution, it does not seem right in my eyes.
-
Jose Alcérreca almost 7 yearsWe're working on a sample for exactly this. I called it
LiveEvent
and it uses aLiveData<Boolean>
to check if it's been called already. Stay tuned. -
Alex Radzishevsky almost 7 yearsI'm interested in LiveEvent sample. Where/when it is going to be published?
-
Jose Alcérreca almost 7 years
-
superjugy almost 5 yearsHow would one go about a confirmation dialog where the viewmodel needs to know the answer to the dialog? the viewmodel triggers the singleevent or the event wrapper, but then, how do you know what the user chose?
-
hushed_voice over 4 yearsHey, JoseAlcérreca can you give some insight into @superjugy 's question?? Ideally, how should the dialog box result be communicated to the ViewModel? Let's say, its a confirmation box for creating an account & I need to make an API call when the user clicks proceed in the alert dialog. How will I let my VM know t user confirmed?
-
superjugy over 4 yearsI ended up using the following approach. It solved the 2 way communication issue. Basically you need a callback registered with your notification. blog.tonysneed.com/2011/01/28/…
-
Atamyrat Babayev almost 3 yearsHi Vlad, your first link is broken!)