在 MVVM 模式 中,ViewModel 包含业务逻辑并在需要更新时通知 View。它还通过有关用户事件的视图进行通知。
据我了解,每个模型都应该有一个关联的 ViewModel。所以,如果我们有以下模型:
- 用户
- 帐户
我们会有以下 ViewModel:
- 用户视图模型
- 帐户视图模型
但是,我找到的所有关于使用 MVVM 进行数据绑定的示例都使用单个 ViewModel 进行布局。最近,谷歌在 Architecture Components 中引入了 ViewModel 类。这让我相信一个 Activity 会有一个 ViewModel 可以连接到所有相关的模型:
用户/帐户 –> ActivityViewModel
如果我们想到 RecyclerView ,这会变得更加复杂。每个适配器项目本身都可以是一个 ViewModel,因此具有 RecyclerView 的 Activity 将在列表中有多个 ViewModel,并为剩余的视图内容加上一个主视图模型(假设它们需要来自 ViewModel 的信息)。例如:
在此示例中,我们有一个 Account ViewModel 列表和一个 UserViewModel。这将如何嵌入到单个 ActivityViewModel 中?
原文由 fhsilva 发布,翻译遵循 CC BY-SA 4.0 许可协议
每个视图(Activity、Fragment 或自定义视图)应该有一个 ViewModel,有多个 LiveData,每个逻辑单元一个。在图像中,一个逻辑单元是用户数据,另一个逻辑单元是设置数据,因此您将在 ViewModel 中公开两个 LiveData。
这些概念也可以在上一届 Google I/O 中推荐的 google 应用程序架构中看到,其中 Activity/Fragment 具有 1 个 ViewModel 和多个 LiveData: