首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >androidx.lifecycle.ViewModelStoreOwner in ViewModelProvider不能应用于androidx.lifecycle.LifeCycleOwner

androidx.lifecycle.ViewModelStoreOwner in ViewModelProvider不能应用于androidx.lifecycle.LifeCycleOwner
EN

Stack Overflow用户
提问于 2020-02-28 06:18:34
回答 2查看 4.9K关注 0票数 0

我正在尝试在片段中实现ViewModel,LiveData。在遍历媒体博客之后,我尝试在声明ViewModel对象时使用getViewLifecycleOwner()方法。

代码语言:javascript
复制
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
viewModel = new ViewModelProvider(getViewLifecycleOwner()).get(MainActivityViewModel.class);
}

但它会显示以下错误,

androidx.lifecycle.ViewModelStoreOwner in ViewModelProvider不能应用于androidx.lifecycle.LifeCycleOwner

当我试图将其转换为ViewModelStoreOwner时,应用程序通过显示下面的错误而崩溃,

不能将java.lang.ClassCastException: androidx.fragment.app.FragmentViewLifecycleOwner转换为androidx.lifecycle.ViewModelStoreOwner

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

EN

回答 2

Stack Overflow用户

发布于 2020-02-28 06:24:07

使用此方法对视图模型对片段进行范围调整:

代码语言:javascript
复制
viewModel = new ViewModelProvider(this).get(MainActivityViewModel.class);

如果你想把它的范围限定在你的活动范围内,你可以这样做:

代码语言:javascript
复制
viewModel = new ViewModelProvider(requireActivity()).get(MainActivityViewModel.class);
票数 1
EN

Stack Overflow用户

发布于 2020-03-03 16:37:41

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

密码会是这样的。

代码语言:javascript
复制
viewModel = new ViewModelProvider(this).get(MainActivityViewModel.class);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60446265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档