blakelee
10/28/2020, 4:48 AMallan.conda
10/28/2020, 7:10 AM@Binds
@IntoMap @ViewModelClassKey(LoginViewModel::class)
abstract fun bindViewModel(viewModel: SomeViewModel): ViewModel
Ahmed Ibrahim
10/28/2020, 9:46 AM@Inject
lateinit var viewModelProvider: Provider<MyViewModel>
private val myViewModel by viewModels {
viewModelProvider.get()
}
blakelee
10/29/2020, 1:41 AMallan.conda
10/29/2020, 1:41 AMblakelee
10/29/2020, 1:43 AMallan.conda
10/29/2020, 1:45 AM@ViewModelInject
otherwise there’s no easy way since ViewModels are a corner case,Ahmed Ibrahim
10/29/2020, 8:54 AM@Inject
lateinit var viewModelProvider: Provider<MyViewModel>
private val myViewModel: MyViewModel by viewModels {
object: ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
@Suppress("UNCHECKED_CAST")
return viewModelProvider.get() as T
}
}
}
Now you can replace the ugly object: ViewModelProvider.Factory
part by extracting it to an inline function to get a much more elegant version of the above code
@Inject
lateinit var viewModelProvider: Provider<ViewModel>
private val myViewModel: ViewModel by viewModels {
createSimpleViewModelFactory { viewModelProvider.get()
}
}
blakelee
10/29/2020, 6:32 PM