In a word game app I share a model between an activity and a fragment:
public class MainViewModel extends AndroidViewModel {
private LiveData<List<Game>> mGames;
private final MutableLiveData<Game> mDisplayedGame = new MutableLiveData<>();
(please excuse the non-english text in the screenshot)
The activity observes mGames
being currently played by the user and updates the navigational drawer menu (see the left side of the above screenshot).
The fragment observes mDisplayedGame
and displays it in a custom view (see the right side of the above screenshot).
My problem is that when the list of the games is updated at the server (and the activity receives new list of games via Websocket and stores it in the Room), I need to post an update to the fragment: "Hey, the game you are displaying was updated, redraw it!"
Is it possible to do that from within the shared view model?
I know that I could observe mGames
in the fragment too and add a code there iterating through them and then finding out if the displayed game was updated at the server.
But I would prefer to do it in the MainViewModel
because I have a feeling that the fragment should only observe the one game it is displaying and that's it.
TL;DR
Whenever mGames
is updated in the view model via Room, I need to notify the mDisplayedGame
observers too!
MediatorLiveData
(there's also someTransformation
methods that might suffice as well....some of them I think just wrapMediatorLiveData
). – ArcadianTransformations.switchMap
should work – Protocol