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

能否在Compose Navigation不同路由中通过hiltViewModel()共享ViewModel?

Compose Navigation中hiltViewModel()的实例创建逻辑
  • 核心结论:hiltViewModel() 并非无论调用多少次都只生成一个实例,它的实例数量取决于指定的作用域:
    • 默认行为:和viewModel()类似,hiltViewModel()默认会将ViewModel绑定到当前导航目标的ModelStoreOwner,每个导航目标里调用它,都会生成该目标专属的ViewModel实例。区别仅在于hiltViewModel()是通过Hilt完成依赖注入,而viewModel()是Compose原生的实例创建方式。
    • 共享实例的场景:如果需要在多个导航目标间共享同一个SoundViewModel实例,你需要手动指定共享的ViewModelStoreOwner,比如绑定到某个父级导航栈条目,示例代码如下:
      mViewMode: SoundViewModel = hiltViewModel(
          storeOwner = { findNavController().getBackStackEntry("父级路由的名称") }
      )
      
      这样所有指定该父级栈条目作为作用域的导航目标,都会复用同一个ViewModel实例。

内容的提问来源于stack exchange,提问作者HelloCW

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:30:51