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);