在 Android MVVM 架构中,获取 ViewModel 的几种方式
下面是几种主要获取方式的进一步说明:
使用 ViewModelProvider 直接获取:
这是最基础的方式。ViewModelProvider 会与你传入的 ViewModelStoreOwner(通常是 Activity 或 Fragment)关联,确保在配置更改(如屏幕旋转)时返回相同的 ViewModel 实例。
// 在 Activity 或 Fragment 中
val viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
2.
使用 KTX 扩展属性(推荐用于简单场景):
这是目前最简洁和推荐的写法,它在背后仍然使用 ViewModelProvider,但通过属性委托的形式简化了代码。
// 在 Fragment 中获取仅限于该 Fragment 的 ViewModel
private val viewModel: MyViewModel by viewModels()
// 在 Fragment 中获取与宿主 Activity 共享的 ViewModel
private val sharedViewModel: SharedViewModel by activityViewModels()
使用此方式前,需在 build.gradle 中添加相应的 KTX 扩展库依赖,例如:
implementation “androidx.fragment:fragment-ktx:1.6.2”
implementation “androidx.activity:activ