Jetpack Compose中如何创建多个FollowViewModel实例
同页面获取多个同类型ViewModel实例的方案
默认viewModel()仅以ViewModel类名作为缓存唯一标识,所以同一类默认拿到的都是同一个实例,要获取不同实例只需要给每个实例指定独立的自定义key即可,该方式依然保留系统自带的生命周期管理能力。
实现代码
直接在调用viewModel()时传入不同的key参数即可:
fun Following() { // 第一个FollowViewModel实例 val followVm1: FollowViewModel = viewModel(key = "follow_vm_1") // 第二个FollowViewModel实例,key和第一个不同即可 val followVm2: FollowViewModel = viewModel(key = "follow_vm_2") // 后续两个实例独立处理不同业务逻辑,互不影响 }
如果你希望保留通过函数参数注入ViewModel的写法,也可以在调用处传入不同key的实例:
// 页面调用处 Following( vmForFollow = viewModel(key = "vm_follow"), vmForUnfollow = viewModel(key = "vm_unfollow") ) // Following函数声明 fun Following( vmForFollow: FollowViewModel, vmForUnfollow: FollowViewModel ) { // 业务逻辑 }
注意事项
- 自定义key只要在当前ViewModel宿主(Activity/Fragment/导航目的地)范围内唯一即可,不会和其他宿主的key冲突
- 所有通过
viewModel()创建的实例,无论是否指定key,都会遵循宿主的生命周期,在宿主销毁时自动回收,无需手动管理
内容的提问来源于stack exchange,提问作者gaohomway
相关产品推荐
相关产品推荐

