首页 > 解决方案 > AndroidViewModel的Android getViewModelStoreOwner,没有零参数构造函数错误

问题描述

我正在使用导航组件的 beta 版本,我的代码运行良好,然后我换回了最新的非 beta 版本,它停止了工作,但据我所知,我没有使用任何 beta-ish :-)

我想将视图模型范围限定为导航图我通过获取导航控制器商店所有者来做到这一点,这适用于 ViewModel 但不适用于 AndroidViewModel,尝试时会引发错误,因为它需要一个无零参数的构造函数,但事实并非如此对于 AndroidViewModel 但如上所述,这适用于 beta 版本,

private ViewModelStoreOwner getStoreOwner() {

        NavController navController = Navigation
                .findNavController(requireActivity(), R.id.root_navigator_fragment);
        return navController.getViewModelStoreOwner(R.id.root_navigator);

}

与它一起使用

singleCardViewModel = new ViewModelProvider(getStoreOwner()).get(SingleCardViewModel.class);

所以我可以通过几种方法来完成这项工作

1) 将 android 视图模型交换为普通视图模型,这对大多数人来说都可以完成,但是有些视图模型需要应用程序来进行我的数据库调用,

2)我可以将它们交换为视图模型,然后让工厂将其传递给应用程序,

3)我可以通过传递'this'而不是getStoreOwner来替换片段的getStoreOwner,但这可能意味着更多的测试以确保它不持有值

4)继续使用测试版,如果可能的话我宁愿避免这种情况

这些都不是真正理想的,这不应该有效吗?我在做明显错误的事情吗?

标签: androidviewmodelandroid-jetpackandroid-viewmodelandroid-jetpack-navigation

解决方案


推荐阅读