在三个片段之间共享 ViewModel

Gil*_*oot 2 java android android-fragments kotlin android-viewmodel

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


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

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

fra*_*kee 5

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

class FragmentA : Fragment() {

    val viewModel: SharedViewModel by viewModels()
}
Run Code Online (Sandbox Code Playgroud)

现在你应该能够从访问该视图模型BC这样的:

class FragmentB : Fragment() {

    val viewModel: SharedViewModel by viewModels(
        ownerProducer = { this.requireParentFragment() }
    )
}
Run Code Online (Sandbox Code Playgroud)