追加のパラメーターをViewModelに送信したいのですが、これはAndroidViewModelから拡張されます。このパラメーターをViewModelFactoryクラスに追加するにはどうすればよいですか?
ViewModel
class ProjectViewModel(application: Application) : AndroidViewModel(application) {
// need a param for project id...
}
ViewModelFactory
class ProjectViewModelFactory(val projectId: Int): ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
// need to send this...
return ProjectViewModel(projectId) as T
}
}
注:ドキュメントに記載されていることに気づきました:AndroidViewModelサブクラスには、Applicationを唯一のパラメーターとして受け入れるコンストラクターが必要です。
だから私がやろうとしていることをすることが可能(または良い)かどうかはわかりません。
ViewModelを取得します。
viewModel = ViewModelProviders.of(this,
new BListFactory(getActivity().getApplication(), 1))
.get(BListViewModel.class);
工場:
class BListFactory extends ViewModelProvider.NewInstanceFactory {
@NonNull
private final Application application;
private final long id;
public BListFactory(@NonNull Application application, long id) {
this.application = application;
this.id = id;
}
@NonNull
@Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
if (modelClass == BListViewModel.class) {
return (T) new BListViewModel(application, id);
}
return null;
}
}
AndroidViewModel:
public class BListViewModel extends AndroidViewModel {
private final long id;
public BListViewModel(@NonNull Application application, final long id) {
super(application);
this.id = id;
}
}