在三个片段之间共享 ViewModel

Sharing ViewModel between three fragments

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


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

但是这个是关于在两个片段和一个 activity 之间共享一个视图模型,所以它不能正常工作。

你试过这样的事情吗?将视图模型注入主根片段 A:

class FragmentA : Fragment() {

    val viewModel: SharedViewModel by viewModels()
}

现在您应该能够从 BC 访问此视图模型,如下所示:

class FragmentB : Fragment() {

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