Я использую Room
базу данных с ViewModel
. Все работает хорошо. Но требование состоит в том, что я хочу предоставить некоторую зависимость для ViewModel
с помощью AndroidViewModelFactory
. Я могу создать ViewModelFactory
класс, который реализует ViewModelProvider.Factory
. Я передаю обычную строку как зависимость от ViewModel. Код для класса Factory:
public class TestViewModelFactory implements ViewModelProvider.Factory{
private static final String DEFAULT_LIMIT = "4";
static Application application;
static String created="ViewModelFactorySuccess";
public static TestViewModelFactory createFactory(Activity activity) {
application = activity.getApplication();
if (application == null) {
throw new IllegalStateException("Not yet attached to Application");
}
return new TestViewModelFactory(application, created);
}
public TestViewModelFactory(Application application, String created) {
application=application;
created=created;
}
@NonNull
@Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
try {
return modelClass.getConstructor(TestViewModel.class, int.class)
.newInstance(application, created);
} catch (NoSuchMethodException | IllegalAccessException |
InstantiationException | InvocationTargetException e) {
throw new RuntimeException("Cannot create an instance of " + modelClass, e);
}
}
}
В MainActivity
нормальный экземпляр ViewModel
создается как
TestViewModel testViewModel=new ViewModelProvider.AndroidViewModelFactory(getApplication()).create(TestViewModel.class);
который работает нормально. Но как создать экземпляр фабричного класса ViewModel, чтобы зависимость могла быть предоставлена ViewModel. Пожалуйста, предложите правильный подход для создания ViewModel
экземпляра. Любая помощь будет оценена по достоинству.
ViewModel
какtestViewModelNew=new ViewModelProvider(MainActivity.this,factory).get(TestViewModelNew.class);
- person Satyam Gondhale   schedule 05.04.2020