如何在Composable函数中获取SharedViewModel单例(使用Hilt)
第一步:给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
相关产品推荐
相关产品推荐

