Android-Dagger将共享视图模型注入到片段
我需要用共享ViewModel绑定两个片段 组成部分:Android-Dagger将共享视图模型注入到片段,android,android-fragments,mvvm,viewmodel,dagger-2,Android,Android Fragments,Mvvm,Viewmodel,Dagger 2,我需要用共享ViewModel绑定两个片段 组成部分: void injectMovieFragment(MovieFragment movieFragment); void injectMovieCollectionFragment(MovieCollectionFragment movieCollectionFragment); SharedViewModelModule: @Provides MovieSharedViewModel provideMovieSharedViewMod
void injectMovieFragment(MovieFragment movieFragment);
void injectMovieCollectionFragment(MovieCollectionFragment movieCollectionFragment);
SharedViewModelModule:
@Provides
MovieSharedViewModel provideMovieSharedViewModel(Fragment fragment) {
return new ViewModelProvider(fragment.requireActivity()).get(MovieSharedViewModel.class);
}
此代码导致Dagger上出现MissingBinding错误(无法从MovieFragment/MovieCollectionFragment获取片段)
SharedViewModelModule v2:
@Provides
MovieSharedViewModel provideMovieSharedViewModelToMovieFragment(MovieFragment fragment) {
return new ViewModelProvider(fragment.requireActivity()).get(MovieSharedViewModel.class);
}
@Provides
MovieSharedViewModel provideMovieSharedViewModelToMovieCollectionFragment(MovieCollectionFragment fragment) {
return new ViewModelProvider(fragment.requireActivity()).get(MovieSharedViewModel.class);
}
此代码导致Dagger上出现重复绑定错误
要在不使用Dagger2注入的情况下获得sharedViewModel,我只需使用:
sharedViewModel = new ViewModelProvider(requireActivity()).get(MovieSharedViewModel.class);
在由MovieFragment和MovieCollectionFragment类创建的onviewInside中,这很好地工作。如何使用Dagger 2正确注入此共享ViewModel?如果您可以在片段中添加使用注入的方式,那就太好了。从错误来看,似乎您没有将创建的片段注入匕首图 这是必需的,因为片段通常由android创建,您需要向dagger提供创建的实例 我使用的方法类似于从我的
CustomApplication
类中公开我的DaggerComponent
(您也可以通过活动公开组件)。
然后在片段的onAttach
函数中,像这样注入创建的片段
override fun onAttach(context: Context) {
super.onAttach(context)
(context.applicationContext as CustomApplication).applicationComponent.injectMovieFragment(this)
}
这将修复错误。请提供您是如何使用片段注入的,以获得更完整的答案