首页 > 解决方案 > ViewModel 创建 2 个实例而不是 1 个

问题描述

我目前正在使用 Google 的 NavGraph 实现一个带有多个片段的 Activity 应用程序,目前我在 MainActivity 中有一个片段,其中包含一个 ViewPager2 和 2 个子片段用于选项卡

现在我有 1 个 ViewModel 包含父片段和子片段,当我初始化 ViewModel 时,不是为所有 3 个片段创建单个实例,而是每个片段有 1 个实例,我怎么只有 1 个实例?

这就是我为父片段和子片段初始化 ViewModel 的方式

paymentViewModel = ViewModelProvider(requireActivity()).get(PaymentViewModel::class.java)

如果 ViewModelProvider 已经存在而不是复制,它不应该返回已经创建的实例吗?

标签: androidkotlinandroid-fragmentsandroid-viewmodel

解决方案


这里的关键是context传递给ViewModelProvider' 的构造函数,所以目前你正在获取活动的 vm 提供者,它应该返回活动正在使用的实例。

所以是的,片段应该像我看到的那样工作,你是如何在活动中实例化虚拟机的?


推荐阅读