我使用的是导航组件的beta版本,我的代码运行正常,然后我换回了最新的非beta版本,它停止了工作,但是从我的看到,我没有使用任何beta版本:-)
我想将视图模型的作用域限定为导航图,这是通过获取导航控制器商店所有者来实现的,它适用于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)继续使用beta版,如果可能的话,我宁愿避免使用此方法
这些都不是很理想,这不行吗?我做错了什么吗?