Rohit Surwase
01/23/2020, 12:11 PMclass MainViewActVM(val repository: AppRepository) : ViewModel(){
}
//...Our Activity/Fragment
private val mainViewActVM: MainViewActVM by lazy {
ViewModelProviders.of(this, ReminderViewActVM.Factory(AppRepository.getInstance(this))).get(MainViewActVM::class.java)
So instead of doing this why can’t (don’t) we use following
class MainViewActVM(application: Application) : AndroidViewModel(application) {
private val repository: AppRepository = AppRepository.getInstance(application)
.....
}
What are the downside of using second approach?Rohit Surwase
01/23/2020, 12:38 PMRohit Surwase
01/23/2020, 12:39 PMSagar Suri
01/23/2020, 12:41 PMFrancisco Javier Ruiz Rodriguez
01/23/2020, 12:45 PMstreetsofboston
01/23/2020, 12:47 PMRohit Surwase
01/23/2020, 1:14 PMstreetsofboston
01/23/2020, 1:16 PMRohit Surwase
01/23/2020, 1:19 PMMichael Friend
01/23/2020, 2:03 PMMichael Friend
01/23/2020, 2:05 PMViewModel
directly instead of using ViewModelProviders, but that is definitely not best practice and is probably there for simplicity of example.Michael Friend
01/23/2020, 2:06 PMby lazy {
ViewModelProviders.of(this, ReminderViewActVM.Factory(AppRepository.getInstance(this))).get(MainViewActVM::class.java)
}
you can actually use an android-ktx extension by viewModels(factoryProducer: () -> ViewModelProvider.Factory = {})
pretty much does the same thing. https://developer.android.com/reference/kotlin/androidx/activity/package-summary#viewmodelsDaniel
01/23/2020, 9:09 PMclass MainViewActVM(
application: Application,
private val repository: AppRepository = AppRepository.getInstance(application)) : ViewModel() {
// ...
}
This way you can at least swap it out with a mock in your unit testRohit Surwase
01/24/2020, 10:31 AMMitch
02/02/2020, 1:47 PMRohit Surwase
02/02/2020, 3:33 PM