Reputation: 905
I have the following class:
public class MovieViewModel extends ViewModel {
private String query;
public MovieViewModel() {
MyFactory factory = new MyFactory(); //Pass the query in the constructor
//other stuff
}
}
And in my MainActivity
, I'm creating an object of this class like this:
MovieViewModel model = ViewModelProviders.of(this).get(MovieViewModel.class);
How can I create an object of MovieViewModel
class and in the same time I initialize the query
String so it can be passed to the MyFactory
constructor?
Upvotes: 0
Views: 1833
Reputation: 495
You have to provide a factory class :
public class MovieViewModel extends ViewModel {
private String query;
MovieViewModel(String objectToBePassed) {
//other stuff
}
static class MovieViewModelFactory extends ViewModelProvider.NewInstanceFactory {
private String mObject;
public MovieViewModelFactory(String objectToBePassed) {
mObject = objectToBePassed;
}
@NonNull
@Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
return (T) new MovieViewModel(mObject);
}
}
}
and usage
ViewModelProviders.of(context,
new MovieViewModel.MovieViewModelFactory(object))
.get(MovieViewModel.class);
Upvotes: 1
Reputation: 58934
You can create custom Factory.
public class MovieViewModelFactory implements ViewModelProvider.Factory {
private Application mApplication;
private String mParam;
public MovieViewModelFactory(Application application, String param) {
mApplication = application;
mParam = param;
}
@Override
public <T extends ViewModel> T create(Class<T> modelClass) {
return (T) new MovieViewModel(mApplication, mParam);
}
}
Now you can use like this
MovieViewModel movieViewModel = ViewModelProviders.of(this, new MovieViewModelFactory(this.getApplication(), "param")).get(MovieViewModel.class);
Upvotes: 1