фрагменты использую вот такую структуру
@Qualifier
@MustBeDocumented
@Retention(AnnotationRetention.SOURCE)
@Target(AnnotationTarget.FIELD, AnnotationTarget.FUNCTION)
annotation class ViewModelInjection
и вот такие провайдеры
@Suppress("UNCHECKED_CAST")
val factory = object : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>) = lazyViewModel.get() as T
}
inline fun <reified V : ViewModel, reified F : Fragment> provide(fragment: F) =
ViewModelProvider(fragment, factory).get(V::class.java)
Споткнулся о кейс, когда мне для нескольких одновременно живущих фрагментов нужна одна и та же VM, при этом, она должна быть Singleton.
Суть в том, чтобы создать Общую ВМ для общения между фрагментами.
Для DI используется Dagger2
Есть какие-нибудь рекомендаци?
Ну обычно если указать одну и туже активность, то будет возвращаться один и тот же ViewModel. viewModel = ViewModelProvider(requireActivity(), viewModelFactory).get(MapNewTwoViewModel::class.java) Как с DI не знаю
Окей, но как мне потом ВМке вкинуть зависимости в конструктор?
в моем случае этим занимается ViewModelFactory
Обсуждают сегодня