2021 Aug. 29.
2021 Aug. 28.
概要
ViewModelを継承した引数付きクラスを定義する
ViewModelProvider.Factoryを継承した、ViewModelの引数付きインスタンスを生成するためのクラスを定義する
MainActivity内でViewModelProvider.Factoryの前記サブクラスのインスタンスを生成する
サンプル
SampleViewModel.kt
import androidx.lifecycle.ViewModel class SampleViewModel(val user: String, val password: String): ViewModel() { // 以下にViewModel内の動作コードを記述する }
SampleViewModelFactory.kt
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider class SmbViewModelFactory(val user: String, val password: String): ViewModelProvider.Factory { override fun <T : ViewModel> create(modelClass: Class<T>): T { return SmbViewModel(user, password) as T } }
MainActivity.kt
import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.ViewModelProvider class MainActivity : AppCompatActivity() { val user: String = "foo" val password: String = "pass" lateinit var sampleViewModel: SampleViewModel override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // get ViewModel val sampleViewModelFactory = SampleViewModelFactory(user, password) sampleViewModel = ViewModelProvider(this, sampleViewModelFactory).get(SampleViewModel::class.java) } }