【发布时间】:2022-01-07 15:15:30
【问题描述】:
我知道有很多类似的问题,我已经解决了,但我的问题仍然没有解决。
我的问题的缩小示例,
我有 2 个可组合的 ScreenA 和 ScreenB。
两个可组合项都有单独的视图模型。
我从屏幕 A 开始并导航到屏幕 B。按下后退按钮时,我希望屏幕 B 视图模型被破坏。因此,当我再次导航到屏幕 B 时,我希望再次创建它的视图模型。
屏幕A
@Composable
fun ScreenA(
screenViewModel: ScreenAViewModel = hiltViewModel(),
) {
// Compose code
}
屏幕B
@Composable
fun ScreenB(
screenViewModel: ScreenBViewModel = hiltViewModel(),
) {
// Compose code
}
从the Hilt and Jetpack Navigation Docs 开始,我的理解是使用hiltViewModel() 应该将视图模型的范围限定为特定的可组合。我不清楚那里是否有错误。
我如何验证视图模型没有被破坏?
在屏幕 B 视图模型初始化块中添加了一个断点。当我来回导航时,它只到达初始化一次。
推荐问题
How to destroy a ViewModel when user leave a screen
How to share a viewmodel between two or more Jetpack composables inside a Compose NavGraph?
Activity view model in Jetpack compose
Android Compose Navigation and ViewModel lifecycle
Different viewmodel for different composable functions inside same activity
具有最少可重现代码的示例 repo - https://github.com/Abhimanyu14/compose-navigation-sample
【问题讨论】:
-
这能回答你的问题吗? Scoping States in Jetpack Compose
-
我们需要minimal reproducible example。 Here's mine,按预期工作,例如每次出现屏幕并显示新的日期时间时都会调用
init。如果它不适合您,您使用的是哪个 Compose/Navigation 版本? -
@PhilipDukhov,很明显我在我的主要项目中做错了什么。我创建了一个示例 MVP 项目来在这里分享。但它按预期工作。如果我得到问题的根本原因,我将深入研究我的存储库以了解更多信息并进行更新。谢谢。 ??????
标签: android android-jetpack-compose