You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:57:00