gpt4 book ai didi

android - Hilt 在同一 Activity 中创建不同的 View 模型实例

转载 作者:行者123 更新时间:2023-12-03 15:15:37 25 4
gpt4 key购买 nike

最近从 Dagger 迁移到 Hilt 后,我​​开始观察到关于 ViewModel 的非常奇怪的行为。下面是代码 fragment :


@HiltAndroidApp
class AndroidApplication : Application() {}

@Singleton
class HomeViewModel @ViewModelInject constructor() :
ViewModel() {}

@AndroidEntryPoint
class HomeFragment : Fragment(R.layout.fragment_home) {

private val homeViewModel by viewModels<HomeViewModel>()

override fun onResume() {
super.onResume()
Timber.i("hashCode: ${homeViewModel.hashCode()}")
}
}


@AndroidEntryPoint
class SomeOtherFragment : Fragment(R.layout.fragment_home) {

private val homeViewModel by viewModels<HomeViewModel>()

override fun onResume() {
super.onResume()
Timber.i("hashCode: ${homeViewModel.hashCode()}")
}
}

hashCode 的值在所有 fragment 中并不一致。我无法弄清楚我还缺少什么以在 Activity 中生成 View 模型的单例实例。
我正在使用单一 Activity 设计并添加了所有必需的依赖项。

最佳答案

当您使用 by viewModels ,您正在创建一个范围为该单个 Fragment 的 ViewModel - 这意味着每个 Fragment 将具有其自己的该 ViewModel 类的单个实例。如果你想要一个单一的 ViewModel 实例作用于整个 Activity,你会想要使用 by activityViewModels

private val homeViewModel by activityViewModels<HomeViewModel>()

关于android - Hilt 在同一 Activity 中创建不同的 View 模型实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62560019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com