使用 viewModels 从 ChildFragment 访问 ParentFragment 中的 ViewModel

Accessing ViewModel in ParentFragment from ChildFragment using viewModels

我正在尝试使用 viewModelsChildFragment 访问 ParentFragmentParentViewModel。这是我的代码。


// In ParentFragment

class ParentFragment : Fragment() {
    val parentViewModel: ParentViewModel by viewModels {
        ParentViewModelFactory(getRepository())
    }
    ...
}

// In ChildFragment

class ChildFragment : Fragment() {
    val parentViewModel: ParentViewModel by viewModels(
        { requireParentFragment() }
    )
    ...
}

但是,只有当我在 ParentViewModel 中设置一个 LiveData 变量并让 ParentFragment 像这样观察它时,此代码才有效:

parentViewModel.text.observe(this) {
    toast(it)
}

我没有必要从 ParentFragment 内部观察 ViewModel。我只需要它为 ChildFragments 定义 lifecycle

如果我摆脱上面的观察,我会得到这个错误:

'java.lang.RuntimeException: Cannot create an instance of class ParentViewModel'
我怎样才能让 ChildFragments 在不设置虚拟实时数据对象的情况下访问 ParentViewModel,以便 ParentFragment 可以观察到它们。

在 ChildFragment 中,您应该在初始化时传递工厂。试试这个

class ChildFragment : Fragment() {
    val parentViewModel: ParentViewModel by viewModels(
        { requireParentFragment() }
    ) { ParentViewModelFactory(getRepository()) }
    ...
}