use*_*924 7 android android-jetpack-compose dagger-hilt jetpack-compose-navigation
我检查了此信息https://developer.android.com/jetpack/compose/libraries#hilt-navigation如何注入ViewModel撰写屏幕。
现在我为我的测试应用程序实现了这样的:
NavHost(
navController = navController,
startDestination = startDestination,
modifier = modifier
) {
composable(Screen.Topics.name) {
val parentEntry = remember { navController.getBackStackEntry(Screen.Topics.name) }
val topicsViewModel = hiltViewModel<TopicsViewModel>(parentEntry)
TopicsScreen(
topicsViewModel = topicsViewModel,
openDrawer = openDrawer,
navigateToTopicDetails = { topic -> actions.navigateToTopicsDetails(topic) }
)
}
...
Run Code Online (Sandbox Code Playgroud)
如果我使用会有什么不同吗
val parentEntry = remember { navController.getBackStackEntry(Screen.Topics.name) }
val topicsViewModel = hiltViewModel<TopicsViewModel>(parentEntry)
Run Code Online (Sandbox Code Playgroud)
要不就
val topicsViewModel = hiltViewModel<TopicsViewModel>()
Run Code Online (Sandbox Code Playgroud)
我想只有当我们使用嵌套图并且我们想要获取特定图范围的 ViewModel 时才需要第一个https://developer.android.com/jetpack/compose/navigation#nested-nav
因此,在我的情况下,如果我不使用嵌套图,两种方法的范围是相同的?
那么我可以只用hiltViewModel<TopicsViewModel>()在我的情况下吗?
我认为您已经为您的问题提供了明确的解释,但总而言之,
hiltViewModel<TopicsViewModel>(parentEntry)当您有嵌套导航图时使用。当您将 hiltViewModel 与 ParentEntry 结合使用时,您是在告诉 Compose 创建一个范围仅限于嵌套图的 ViewModel 实例。
由于您没有在代码中使用嵌套图,因此您可以使用hiltViewModel不带parentEntry 的更简单版本。这将创建一个 ViewModel 实例,其范围仅限于当前屏幕的导航图,这正是您想要的。
| 归档时间: |
|
| 查看次数: |
3437 次 |
| 最近记录: |