Как передать пользовательские параметры в ViewModel с помощью Factory?
Я знаю, что для передачи пользовательских параметров во ViewModel мы можем использовать ViewModelProvider.NewInstanceFactory, например так:
// Factory Class
class MyFactory extends ViewModelProvider.NewInstanceFactory {
private final String mId;
public MyFactory(String id) {
mId = id;
}
@NonNull
@Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
return (T) new MyViewModel(mId);
}
}
// MyViewModel class
class MyViewModel extends ViewModel {
public MyViewModel(String id) {
...
}
}
// Activity I can Initialise as:
MyFactory modelFactory = new MyFactory(id);
viewModel = ViewModelProviders.of(this, modelFactory).get(MyViewModel.class);
Как можно добиться того же с помощью пользовательских параметров в подклассе AndroidViewModel вместе с контекстом приложения. подобно
// MyAndroidViewModel class
class MyAndroidViewModel extends AndroidViewModel {
public MyViewModel(Application context, String id) {
super(context);
...
}
}
Как инициализировать MyAndroidViewModel и как здесь вступает в игру ViewModelProvider.NewInstanceFactory?
1 ответ
Решение
У меня была эта проблема ранее, и я справился с этим. В своей деятельности создайте свой ViewModel
Завод как показано ниже:
//Inside MyActivity
ViewModelProvider.Factory factory = new ViewModelProvider.Factory() {
@NonNull
@Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
return (T) new MyAndroidViewModel(getApplication(),
"My string!");
}
};
А затем использовать его для создания вашего ViewModel
:
viewModel = ViewModelProviders.of(this, factory).get(MyAndroidViewModel.class);