Недавно у меня были проблемы с ViewModelProvider.Factory из-за того, что он не загружал все ViewModels проекта.
У меня есть Действия и фрагменты.Активные загружаются без каких-либо проблем, однако я попытался инкапсулировать FragmentViewModels внутри модуля, в котором я создаю фрагмент.
немного кода:
@Module(includes = [
... ,... ,...
])
class UIModule {
@Singleton
@Provides
fun provideViewModelFactory(viewModels: MutableMap<Class<out ViewModel>, @JvmSuppressWildcards Provider<ViewModel>>)
: ViewModelProvider.Factory {
return object : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return requireNotNull(viewModels[modelClass]).get() as T
}
}
}
}
Activity Builder
@Module
abstract class MainActivityBuilder {
....
@ActivityScope
@ContributesAndroidInjector(modules [XXXFragmentModule::class])
abstract fun bindBottomNavigationActivity(): BottomNavigationActivity
}
, так что это XXXFragmentModule
@Module(includes = [ActividadesFragmentModule.ViewModule::class])
abstract class ActividadesFragmentModule {
....
@ContributesAndroidInjector
internal abstract fun contributeSuggestedFragment(): SuggestedFragment
@Module
abstract class ViewModule {
@Binds
@IntoMap
@ViewModelKey(SuggestedViewModel::class)
internal abstract fun bindSuggestedViewModel(viewModel: SuggestedViewModel): ViewModel
}
}
это не работает, viewModels первого блока кода имеет только ViewModels действий, он не добавляет эту последнюю ViewModel.Однако, если @ Module (включает в себя = [ActividadesFragmentModule.ViewModule :: class]) выполняется в ActivityBuilder , он действительно работает perfeclty
@Module(includes = [ActividadesFragmentModule.ViewModule::class])
abstract class MainActivityBuilder
кто-то знает, чтоЯ делаю не так?