コンストラクタを作って渡せばいいじゃん?
そう思ってたんです。
出来なかったんです。
ViewModelのインスタンスの生成って基本的に以下だと思ってて、、、
// ViewModel生成
val viewModel = ViewModelProviders.of(this).get(TopViewModel::class.java)
コンストラクタにわたす余地なくね?ってなったわけです。
ってことで、コンストラクタに引数を渡す方法!
ViewModelのファクトリー作ってファクトリーに引数を渡してあげる!
実装
Factoryを作成
// リストのViewModel
class ListViewModel(val status: Int, val list: List<String>) : BaseViewModel() {
class Factory constructor(
private val status: Int, private val list: List<String>
) : ViewModelProvider.Factory {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel?> create(modelClass: Class<T>): T =
ListViewModel(status, list) as T
}
}
自分はViewModelの中に作っちゃいました。これが正解かどうかはわからない。
Factoryに欲しい引数のコンストラクタ作って、createでViewModelを生成して上げる感じ。
ViewModelを生成する
// ViewModel取得
val viewModel = ViewModelProviders.of(this, ListViewModel.Factory(status, list)).get(ListViewModel::class.java)
これで実質ViewModelのコンストラクタに引数を渡せることに!