2017-09-18 11 views
3

アプリケーションコンテキスト以外のカスタムAndroidViewModelコンストラクタに追加の引数を渡す方法はありますか? 例:Android ViewModelの追加引数

public class MyViewModel extends AndroidViewModel { 
    private final LiveData<List<MyObject>> myObjectList; 
    private AppDatabase appDatabase; 

    public MyViewModel(Application application, String param) { 
     super(application); 
     appDatabase = AppDatabase.getDatabase(this.getApplication()); 

     myObjectList = appDatabase.myOjectModel().getMyObjectByParam(param); 
    } 
} 

そして、私は私のフラグメントでこのコードを使用して、私は、ユーザーにしたい私のカスタムViewModelクラス:

MyViewModel myViewModel = ViewModelProvider.of(this).get(MyViewModel.class) 

だから私は私のカスタムに追加の引数String paramを渡す方法がわかりませんViewModel。私はアプリケーションのコンテキストだけを渡すことができますが、追加の引数は渡せません。私は本当に助けていただければ幸いです。ありがとうございました。

編集:コードを追加しました。私はそれが今より良いことを願っています。

+0

エラーメッセージは何の詳細およびコード – hugoterelle

+0

を追加しますか? –

+0

エラーメッセージはありません。 ViewModelProviderはAndroidViewModelオブジェクトの作成に使用されるため、コンストラクタの引数を設定する場所はわかりません。 –

答えて

11

ViewModelのファクトリクラスが必要です。

public class MyViewModelFactory extends ViewModelProvider.NewInstanceFactory { 
    private Application mApplication; 
    private String mParam; 


    public MyViewModelFactory(Application application, String param) { 
     mApplication = application; 
     mParam = param; 
    } 


    @Override 
    public <T extends ViewModel> T create(Class<T> modelClass) { 
     return (T) new MyViewModel(mApplication, mParam); 
    } 
} 

とビューモデルをインスタンス化するとき、あなたは次のようにします:

MyViewModel myViewModel = ViewModelProviders.of(this, new MyViewModelFactory(this.getApplication(), "my awesome param")).get(MyViewModel.class); 
関連する問題