I'm currently transforming my project architecture from MVP to MVVM. When I'm working on it, I find something made me confused:
In ScheduleViewModelFactory.kt
of project iosched, the factory implements ViewModelProvider.Factory:
class ScheduleViewModelFactory(
private val userEventRepository:DefaultSessionAndUserEventRepository
) : ViewModelProvider.Factory {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(ScheduleViewModel::class.java)) {
return ScheduleViewModel(LoadUserSessionsByDayUseCase(userEventRepository)) as T
}
throw IllegalArgumentException("Unknown ViewModel class")
}
}
In DetailViewModelFactory.java
of project Sunshine from codelab, the factory extends ViewModelProvider.NewInstanceFactory:
public class DetailViewModelFactory extends ViewModelProvider.NewInstanceFactory {
private final SunshineRepository mRepository;
private final Date mDate;
public DetailViewModelFactory(SunshineRepository repository, Date date) {
this.mRepository = repository;
this.mDate = date;
}
@Override
public <T extends ViewModel> T create(Class<T> modelClass) {
//noinspection unchecked
return (T) new DetailActivityViewModel(mRepository, mDate);
}
}
I would like to know:
- What are the differences between ViewModelProvider.Factory and ViewModelProvider.NewInstanceFactory?
- Why they are being used like the codes mentioned above?
- What is the best practice/scenario to use each of them?