可以将一个ViewModel用于多个活动吗?

时间:2019-04-06 06:43:13

标签: android viewmodel android-architecture-components

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

1 个答案:

答案 0 :(得分:0)

您可以将活动的共享视图模型用于片段。例如,您有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使用宽屏。

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