如何在 Android 中实现 ViewModel 工厂
How to Implement ViewModel Factory in Android
我正在使用 ViewModel
实现 Room
数据库。一切正常。但要求是我想使用 AndroidViewModelFactory
为 ViewModel
提供一些依赖。我能够创建实现 ViewModelProvider.Factory
的 ViewModelFactory
class。我将普通字符串作为对 ViewModel 的依赖项进行传递。工厂 class 的代码是
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 工厂的实例 class 以便可以向 ViewModel.Please 提供依赖项建议 ViewModel
实例创建的正确方法。任何帮助将不胜感激。
通用示例(最多 android.arch.lifecycle:extensions:1.1.0)。它从 1.1.1 开始被弃用,
MyViewModel myViewModel = new ViewModelProviders.of(this, new MyViewModelFactory(this.getApplication(), "Your string parameter")).get(MyViewModel.class);
通用示例(针对 android.arch.lifecycle:extensions:1.1.1)
MyViewModel myViewModel = new ViewModelProvider(this, viewModelFactory).get(MyViewModel.class);
或者,使用 ViewModelStore link
MyViewModel myViewModel = new ViewModelProvider(getViewModelStore(), viewModelFactory).get(MyViewModel.class);
我正在使用 ViewModel
实现 Room
数据库。一切正常。但要求是我想使用 AndroidViewModelFactory
为 ViewModel
提供一些依赖。我能够创建实现 ViewModelProvider.Factory
的 ViewModelFactory
class。我将普通字符串作为对 ViewModel 的依赖项进行传递。工厂 class 的代码是
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 工厂的实例 class 以便可以向 ViewModel.Please 提供依赖项建议 ViewModel
实例创建的正确方法。任何帮助将不胜感激。
通用示例(最多 android.arch.lifecycle:extensions:1.1.0)。它从 1.1.1 开始被弃用,
MyViewModel myViewModel = new ViewModelProviders.of(this, new MyViewModelFactory(this.getApplication(), "Your string parameter")).get(MyViewModel.class);
通用示例(针对 android.arch.lifecycle:extensions:1.1.1)
MyViewModel myViewModel = new ViewModelProvider(this, viewModelFactory).get(MyViewModel.class);
或者,使用 ViewModelStore link
MyViewModel myViewModel = new ViewModelProvider(getViewModelStore(), viewModelFactory).get(MyViewModel.class);