ViewModelProvider中的androidx.lifecycle.ViewModelStoreOwner无法应用于androidx.lifecycle.LifeCycleOwner

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

我正在尝试在Fragment中实现ViewModel,LiveData。经过Medium Blog之后,我在声明ViewModel对象时尝试使用方法getViewLifecycleOwner()。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
viewModel = new ViewModelProvider(getViewLifecycleOwner()).get(MainActivityViewModel.class);
}

但是它显示以下错误,

ViewModelProvider中的

androidx.lifecycle.ViewModelStoreOwner无法应用于androidx.lifecycle.LifeCycleOwner

enter image description here

[当我尝试将其强制转换为ViewModelStoreOwner时,应用显示以下错误而崩溃,

java.lang.ClassCastException: androidx.fragment.app.FragmentViewLifecycleOwner无法转换为androidx.lifecycle.ViewModelStoreOwner

如何用Fragment有效地声明ViewModel的生命周期?

android mvvm viewmodel classcastexception android-viewmodel
2个回答
1
投票

使用它来将您的视图模型作用于片段:

viewModel = new ViewModelProvider(this).get(MainActivityViewModel.class);

或者如果您希望将其限制在您的活动范围内:

viewModel = new ViewModelProvider(requireActivity()).get(MainActivityViewModel.class);

0
投票

片段是LifecycleOwner的子类。因此,您可以直接将Fragment引用传递给LifecycleOwner参数。

代码将是这样。

viewModel = new ViewModelProvider(this).get(MainActivityViewModel.class);
© www.soinside.com 2019 - 2024. All rights reserved.