我正在尝试在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
[当我尝试将其强制转换为ViewModelStoreOwner
时,应用显示以下错误而崩溃,
java.lang.ClassCastException: androidx.fragment.app.FragmentViewLifecycleOwner无法转换为androidx.lifecycle.ViewModelStoreOwner
如何用Fragment
有效地声明ViewModel
的生命周期?
使用它来将您的视图模型作用于片段:
viewModel = new ViewModelProvider(this).get(MainActivityViewModel.class);
或者如果您希望将其限制在您的活动范围内:
viewModel = new ViewModelProvider(requireActivity()).get(MainActivityViewModel.class);
片段是LifecycleOwner
的子类。因此,您可以直接将Fragment
引用传递给LifecycleOwner
参数。
代码将是这样。
viewModel = new ViewModelProvider(this).get(MainActivityViewModel.class);