是否可以通过片段访问Activity的AndroidViewModel?

问题描述 投票:0回答:2

[去年夏天,我开始使用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。但是使用这种方法,我无法添加ownerViewModelProvider s构造函数的参数),这导致了问题,即我无法真正从片段内部访问在Activity中创建的ViewModel。

是否有一种方法可以从片段内部访问Activity的ViewModel?还是最好用[]在每个片段中recreate

ViewModel>

ViewModelProvider.AndroidViewModelFactory.getInstance(getActivity().getApplication()).create(CanteensViewModel.class);

而不是在活动内部创建它?

谢谢!

最好的问候朱利安

[去年夏天,我开始使用Android的体系结构组件(Room,ViewModel,LiveData)重构Android应用程序。我有两个会议室存储库,其中一个可以通过...

android viewmodel android-architecture-components
2个回答
0
投票

由于ViewModel绑定到生命周期,并且活动和片段并不总是共享相同的生命周期阶段,所以最好的方法是将其分别绑定到活动和片段(一个或多个)


0
投票

所以我检查了文档,据我所知,我现在应该使用

© www.soinside.com 2019 - 2024. All rights reserved.