Android 如果不使用依赖项注入,是否需要使用ViewModel工厂?
我已经看到了许多对Android 如果不使用依赖项注入,是否需要使用ViewModel工厂?,android,mvvm,Android,Mvvm,我已经看到了许多对ViewModel.Factory的引用,但是我遇到的每个例子都有对依赖注入的引用。基于这个问题:当构造函数有参数时,这似乎是必需的。这是否也适用于不使用依赖注入框架(如Dagger)的项目 以下是我试图做的: public CatalogVerticalListViewModel(@NonNull Application application, RecyclerView.Adapter adapter) { super(application); fina
ViewModel.Factory
的引用,但是我遇到的每个例子都有对依赖注入的引用。基于这个问题:当构造函数有参数时,这似乎是必需的。这是否也适用于不使用依赖注入框架(如Dagger
)的项目
以下是我试图做的:
public CatalogVerticalListViewModel(@NonNull Application application, RecyclerView.Adapter adapter) {
super(application);
final CatalogAdapter catalogAdapter = (CatalogAdapter) adapter;
CatalogManager cm = new CatalogManager(Constants.BASE_URL);
pageData = cm.getCatalog();
}
我需要/想要将适配器传递到
ViewModel
中,我想知道是否需要为此创建自定义工厂。如果是,那会是什么样子 如果您有一个带有构造函数参数的视图模型,那么您必须为此编写一个工厂。避免这种情况的一种方法是删除这些构造函数参数,并使用方法设置这些对象(尽管不是建议的做法)
你的工厂是这样的
public class CatalogViewModelFactory implements ViewModelProvider.Factory {
private Application application;
private RecyclerView.Adapter adapter;
public CatalogViewModelFactory (@NonNull Application application,
RecyclerView.Adapter adapter){
this.application = application;
this.adapter = adapter;
}
public <T extends ViewModel> T create(Class<T> modelClass) {
if (modelClass.isAssignableFrom(CatalogVerticalListViewModel.class)) {
return (T) new CatalogVerticalListViewModel(application,adapter);
}
throw new IllegalArgumentException("Unknown ViewModel class");
}
}
但为什么要将适配器传递给ViewModel?您不应该在ViewModel中使用LiveData并在Activity/Fragment中观察它,然后设置适配器吗?
CatalogViewModelFactory factory =
new CatalogViewModelFactory (application,adapter);
viewModel = ViewModelProviders.of(this, factory).get(CatalogVerticalListViewModel.class);