如何使用Factory将自定义参数传递给ViewModel?

时间:2018-11-07 06:04:37

标签: java android android-architecture-components android-viewmodel

我知道,为了将自定义参数传递给 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 子类中的自定义参数以及Application上下文实现相同的目的。喜欢

// MyAndroidViewModel class
    class MyAndroidViewModel extends AndroidViewModel {

      public MyViewModel(Application context, String id) {
         super(context);
         ...
      }
    }

如何初始化 MyAndroidViewModel ,以及 ViewModelProvider.NewInstanceFactory 在这里如何发挥作用?

1 个答案:

答案 0 :(得分:0)

我以前有这个问题,可以通过这样做来解决。在您的活动中,如下创建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);