by viewmodel()和ViewModelProvider都是用来创建ViewModel实例的方法,但它们的使用方式稍有不同。
使用by viewmodel()时,需要在Activity或Fragment中引入kotlin-android-extensions插件,然后直接在代码中调用by viewmodel()即可创建ViewModel实例。例如:
class MyFragment : Fragment() {
private val viewModel by viewModels
使用ViewModelProvider时,需要手动创建ViewModelProvider实例,然后调用get()方法获取ViewModel实例。例如:
class MyFragment : Fragment() { private lateinit var viewModel: MyViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
}
}
而viewmode()则是一个错误的拼写,应该为viewModels()。
需要注意的是,by viewmodel()和ViewModelProvider在不同的情况下可能会有不同的行为,例如当Activity或Fragment重新创建时。建议根据具体场景选择合适的方法创建ViewModel。