【发布时间】:2019-05-16 11:04:03
【问题描述】:
在文字游戏应用程序中,我在活动和片段之间共享模型:
public class MainViewModel extends AndroidViewModel {
private LiveData<List<Game>> mGames;
private final MutableLiveData<Game> mDisplayedGame = new MutableLiveData<>();
(请原谅截图中的非英文文字)
活动观察到用户当前正在播放的mGames,并更新导航抽屉菜单(见上图左侧)。
片段观察mDisplayedGame并将其显示在自定义视图中(见上图右侧)。
我的问题是当游戏列表在服务器上更新时(并且活动通过 Websocket 接收新的游戏列表并将其存储在房间中),我需要发布更新到片段:“嘿,您正在显示的游戏已更新,重新绘制它!”
是否可以在共享视图模型中做到这一点?
我知道我也可以在片段中观察mGames,并在其中添加一个代码迭代它们,然后找出显示的游戏是否在服务器上更新。
但我更愿意在MainViewModel 中执行此操作,因为我觉得片段应该只观察它正在显示的一个游戏,仅此而已。
TL;DR
每当 mGames 通过 Room 在视图模型中更新时,我也需要通知 mDisplayedGame 观察者!
【问题讨论】:
-
看看
MediatorLiveData(还有一些Transformation方法可能也足够了......其中一些我认为只是包装MediatorLiveData)。 -
Transformations.switchMap应该可以工作
标签: android viewmodel observer-pattern android-architecture-components android-livedata