首页 > 解决方案 > 在三个片段之间共享 ViewModel

问题描述

我有三个片段 A、B 和 C。B 和 C 是 A 的子片段。如何让所有三个片段共享相同的视图模型。从这篇中等文章中,这就是我应该做的:


viewModel = activity?.run {
        ViewModelProviders.of(this)[SharedViewModel::class.java]
    } ?: throw Exception("Invalid Activity")       
}

然而,这是关于在两个片段和一个活动之间共享一个视图模型,因此在我的情况下它不能正常工作。

标签: javaandroidandroid-fragmentskotlinandroid-viewmodel

解决方案


你有没有尝试过这样的事情?将您的视图模型注入您的主根片段A

class FragmentA : Fragment() {

    val viewModel: SharedViewModel by viewModels()
}

现在你应该可以像这样访问这个视图模型BC

class FragmentB : Fragment() {

    val viewModel: SharedViewModel by viewModels(
        ownerProducer = { this.requireParentFragment() }
    )
}

推荐阅读