val navController = rememberNavController()
NavHost(navController = navController, startDestination = "main") {
composable("main"){
mainscreen(navController)
}
composable("sub"){
subscreen(navController)
}
}
@Composable
fun mainscreen(navController:NavController){
println("main")
Button(onClick = { navController.navigate("sub") }) {
Text(text = "go to sub")
}
}
@Composable
fun subscreen(navController:NavController){
println("sub")
Button(onClick = { navController.navigate("main")}) {
Text(text = "go to main")
}
}
这是我的代码,这是我能找到的关于 Jetpack Compose Navigation 的最简单的演示。问题是,当我检查终端输出时,我发现“println()”运行了多次,这表明该屏幕中的任何代码也会运行多次。我认为当我编写更多代码时,这会导致很多问题。有什么办法可以防止这种情况发生吗?
当我删除子屏幕中的按钮时,输出仅显示三个 println()。
//only jump to subscreen and do nothing.
I/System.out: main
I/System.out: sub
I/System.out: main
我认为第一个是由于 navController 的变化(因为有变化,所以可组合重新组合自己?)。然后第二个是由于子屏幕的调用(因为它应该只有一次)。第三个我不知道它来自哪里(为什么主屏幕再次重新组合?).
如果我在两个屏幕中保留两个按钮(这样我就可以从一个屏幕跳到另一个屏幕),在我单击按钮并从主屏幕跳转到子屏幕后,输出显示五个 println()。
//only jump to subcreen and do nothing.
I/System.out: main
I/System.out: sub
I/System.out: main
I/System.out: sub
I/System.out: sub
有两个额外的 println("sub") 这意味着 subscreen 再次重新组合自己两次。 我不知道为什么。
不应该是这样吗
//jump to subcreen
I/System.out: sub
//jump to maincreen
I/System.out: main