Как передать пользовательские параметры в ViewModel с помощью Factory?

Я знаю, что для передачи пользовательских параметров во 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 вместе с контекстом приложения. подобно

// MyAndroidViewModel class
    class MyAndroidViewModel extends AndroidViewModel {

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

Как инициализировать MyAndroidViewModel и как здесь вступает в игру ViewModelProvider.NewInstanceFactory?

1 ответ

Решение

У меня была эта проблема ранее, и я справился с этим. В своей деятельности создайте свой 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); 
Другие вопросы по тегам