[去年夏天,我开始使用Android的体系结构组件(Room,ViewModel,LiveData)重构我的Android应用程序。
我有两个会议室存储库,其中一个可通过应用程序的多个视图(片段)访问。因此,我使用了AndroidViewModel
,它可以访问此存储库并在我的MainActivity
中进行了初始化。
new ViewModelProvider(this).get(CanteensViewModel.class);
在我的两个片段中,我通过以下方式访问此ViewModel:>
new ViewModelProvider(getActivity()).get(CanteensViewModel.class);
直到昨天为止一切正常。但是,然后我更新了我的依赖关系,由于androidx.lifecycle
版本2.2.0不再有效。我总是有一个例外:
Caused by: java.lang.InstantiationException: java.lang.Class<com.(...).CanteensViewModel> has no zero argument constructor
所以我检查了文档,据我所知,我现在应该使用
ViewModelProvider.AndroidViewModelFactory.getInstance(this.getApplication()).create(CanteensViewModel.class);
获得我的ViewModel。但是使用这种方法,我无法添加owner
(ViewModelProvider
s构造函数的参数),这导致了问题,即我无法真正从片段内部访问在Activity中创建的ViewModel。
是否有一种方法可以从片段内部访问Activity的ViewModel?还是最好用[]在每个片段中recreate
ViewModel>ViewModelProvider.AndroidViewModelFactory.getInstance(getActivity().getApplication()).create(CanteensViewModel.class);
而不是在活动内部创建它?
谢谢!
最好的问候朱利安
[去年夏天,我开始使用Android的体系结构组件(Room,ViewModel,LiveData)重构Android应用程序。我有两个会议室存储库,其中一个可以通过...
由于ViewModel绑定到生命周期,并且活动和片段并不总是共享相同的生命周期阶段,所以最好的方法是将其分别绑定到活动和片段(一个或多个)
所以我检查了文档,据我所知,我现在应该使用