前言
使用 viewModel 我们可以方便管理模型数据的生命周期。
简单使用
1 | import androidx.lifecycle.viewmodel.compose.viewModel |
类继承ViewModel
1 | class MainSubjectPageVm : ViewModel() { |
组件中生成实例
1 | val mViewModel: MainSubjectPageVm = viewModel() |
但是如果我们有多个组件,组件有自己的ViewModel,这时候数据就乱套了。
是因为
默认情况下,
ViewModel
是与 Activity 或 Fragment 的生命周期 绑定的。
也就是说
即使同一个 Activity/Fragment 中有多个相同的子组件(如多个自定义 View 或 Compose 组件),只要它们使用 viewModel()
函数获取实例,得到的会是同一个实例。
这是因为 ViewModel
的作用域是整个 Activity/Fragment
,而非单个子组件。
多实例
如果需要多个实例,可以通过指定不同的 ViewModelStoreOwner
来实现:
管理类
1 | import androidx.compose.runtime.Composable |
组件中使用
1 | // 为每个组件创建独立的ViewModelStoreOwner |