hiltViewModel() 提供不同的 Viewmodel 实例

问题描述 投票:0回答:0

我正在处理我的 PET 项目并遇到问题:hiltViewModel() 在每次重组时在组合导航图中提供不同的 ViewModel 实例。

我的 NavHost:

NavHost(...) {
            ...
            composable(Destination.Feed.route) {
                val vm: FeedViewModel = hiltViewModel()
                Log.d("App", "NavGraph: $vm")
                Feed(vm)
            }
            ...

提要屏幕:

@Composable
fun Feed(vm: FeedViewModel) {
    val articles by vm.articles.collectAsState() // StateFlow<List<...>>

    Log.d("Feed", "Feed ui: recomposed")

    Scaffold() { ... }

所以,当我用

BottomNavigationBar
切换屏幕时,
Log.d("App", "NavGraph: $vm")
有可能在 logcat 中用不同的实例和
FeedViewModel@******
向我展示
Feed ui: recomposed
两次。

我三思而后行,因为原来的值是

emptyList()
,然后我在那里添加了想要的值。但另一方面,我可以改变屏幕,并且会有一个
Feed ui: recomposed
的调用,Viewmodel的值将是相同的(不会有
"NavGraph: $vm"
的输出)。

我做错了什么?

android-jetpack-compose android-viewmodel dagger-hilt jetpack-compose-navigation
© www.soinside.com 2019 - 2024. All rights reserved.