使用viewModels从ChildFragment访问ParentFragment中的ViewModel。

问题描述 投票:0回答:1

我正试图访问 ParentViewModel 对于 ParentFragmentChildFragment 使用 viewModels. 这是我的代码。


// In ParentFragment

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

// In ChildFragment

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

然而,这段代码只有在我设置了一个 LiveData 中的变量 ParentViewModel 并有 ParentFragment 这样观察它。

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

我没有必要去观察 ViewModel 从内部 ParentFragment. 我只需要它来定义 lifecycle 对于 ChildFragments.

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

'java.lang.RuntimeException: Cannot create an instance of class ParentViewModel' '。
我怎样才能让ChildFragments访问到 ParentViewModel 而不需要设置虚拟的实时数据对象,这样一来,作为 ParentFragment 可以观察它们。
java android kotlin android-lifecycle
1个回答
1
投票

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

class ChildFragment : Fragment() {
    val parentViewModel: ParentViewModel by viewModels(
        { requireParentFragment() }
    ) { ParentViewModelFactory(getRepository()) }
    ...
}
© www.soinside.com 2019 - 2024. All rights reserved.