【发布时间】:2021-02-23 23:46:27
【问题描述】:
我需要用共享的 ViewModel 绑定两个片段。
组件:
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 获取 Fragment)。
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 上出现 DuplicateBindings 错误。
要在没有 Dagger2 注入的情况下获得 sharedViewModel,我只是使用:
sharedViewModel = new ViewModelProvider(requireActivity()).get(MovieSharedViewModel.class);
在 MovieFragment 和 MovieCollectionFragment 类的 onViewCreated 中,这很好用。
如何使用 Dagger 2 正确注入此共享 ViewModel?
【问题讨论】:
标签: android android-fragments mvvm viewmodel dagger-2