Kotlin-创建viewModel的不同方式

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实例。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容