【问题标题】:Is it ok to use one ViewModel for multiple activities?可以将一个 ViewModel 用于多个活动吗?
【发布时间】:2019-04-06 06:43:13
【问题描述】:

我正在构建一个工作管理应用程序并尝试实现 Android 架构组件。我有一个活动用于查看有关任务的详细信息,然后有多个活动来编辑该任务。由于所有这些活动中的所有数据都是相同的,并且这些活动将经常使用相同的数据一个接一个地打开,我可以为所有这些活动共享一个 ViewModel,还是应该为所有这些活动创建单独的 ViewModel ?谢谢! :)

【问题讨论】:

  • 您将无法找到一个有意义的 ViewModelStore 来共享 ViewModel,除非您自己将其作为单身人士我猜,在这种情况下onCleared() 永远不会发生。

标签: android viewmodel android-architecture-components


【解决方案1】:

您可以将活动的共享视图模型用于片段。例如,您有ItemActivity,它托管ItemFragment 用于项目预览和ItemEditFragment 用于编辑。您可以在片段的onCreate() 回调中获取活动级别视图模型:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val vm = activity?.run {
        ViewModelProviders.of(this).get(ItemViewModel::class.java)
    } ?: throw Exception("Invalid Activity")
}

此外,这种方法可以帮助您implement master-detail model 用于宽屏。

您应该注意,用于不同类型视图(例如预览、编辑)的单一视图模型可能比每个视图的独立视图模型更难维护。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多