Jetpack Compose Navigation,当我导航到另一个屏幕时,该屏幕的代码似乎运行了多次

问题描述 投票:0回答:0
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()”运行了多次,这表明该屏幕中的任何代码也会运行多次。我认为当我编写更多代码时,这会导致很多问题。有什么办法可以防止这种情况发生吗?

enter image description here

当我删除子屏幕中的按钮时,输出仅显示三个 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
kotlin android-jetpack-compose android-jetpack android-jetpack-navigation
© www.soinside.com 2019 - 2024. All rights reserved.