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

如何在Composable函数中获取SharedViewModel单例(使用Hilt)

在Composable中通过Hilt获取Activity级别的SharedViewModel
  • 第一步:给SharedViewModel添加Hilt注解
    确保你的ViewModel类被@HiltViewModel标记,让Hilt能够管理它的实例:

    @HiltViewModel
    class SharedViewModel : ViewModel() { ... }
    
  • 第二步:在Composable中获取Activity级实例
    直接使用hiltViewModel()函数,并指定当前Activity作为ViewModelStoreOwner,就能拿到和Fragment中activityViewModels()一致的单例:

    @Composable
    fun YourComposable() {
        // 强转Context为当前Activity(需确保Composable在Activity宿主中)
        val activity = LocalContext.current as AppCompatActivity
        val sharedViewModel: SharedViewModel = hiltViewModel(activity)
        
        // 正常使用sharedViewModel的逻辑
    }
    

    或者更优雅的方式,使用LocalActivityOwner获取Activity:

    @Composable
    fun YourComposable() {
        val activityOwner = LocalActivityOwner.current
        val sharedViewModel: SharedViewModel = hiltViewModel(activityOwner.activity)
        
        // 业务逻辑代码
    }
    

说明:hiltViewModel()默认会绑定当前Composable所在的ViewModelStoreOwner(比如导航栈条目),指定Activity作为Owner后,就能保证ViewModel的生命周期和Activity一致,实现和Fragment中activityViewModels()完全相同的单例效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 16:15:38