1.使用ViewModelProvider
val myViewModel1 = ViewModelProvider(this, ViewModelProvider.NewInstanceFactory()).get(MyViewModel::class.java)
val myViewModel2 = ViewModelProvider.AndroidViewModelFactory(this.application).create(MyViewModel::class.java)
val myViewModel3 = ViewModelProvider(this).get(MyViewModel::class.java)
2.使用ViewModelProviders
val myViewModel4 = ViewModelProviders.of(this).get(MyViewModel::class.java)
3.使用Kotlin的by viewModels()
代理,这要求你的Activity或Fragment是FragmentActivity或Fragment,并且你的宿主必须是ViewModelStoreOwner
val myViewModel5: MyViewModel by viewModels()
val myViewModel6 by viewModels<MyViewModel>()
4.使用Kotlin的by viewModels() 代理并指定ViewModel的工厂方法:
val viewModel: MyViewModel by viewModels { myFactory }
在以上的代码中,MyViewModel是你自定义的ViewModel类,this通常指Activity或Fragment实例,myFactory是你自定义的ViewModelProvider.Factory(如果你需要自定义实例化逻辑)。
by viewModels() 是一个Kotlin语言特性,它使得在Activity或Fragment的生命周期内,只要Activity或Fragment不被销毁,那么ViewModel实例将会一直被复用,不需要像ViewModelProviders那样每次Activity或Fragment重建时都会创建一个新的ViewModel实例。