Nic*_*Nic 15 navigation android android-jetpack-compose
我创建了一个 Jetpack 撰写导航,如下所示:
val navController = rememberNavController()
Scaffold(
bottomBar = { /* BottomBar code here */ }
){ innerPadding ->
NavHost(
navController = navController,
startDestination = "navigation",
modifier = Modifier.padding(innerPadding)
){
composable("home") { Log.d(TAG, "Show home screen") }
composable("account") { Log.d(TAG, "Show account screen") }
composable("settings") { Log.d(TAG, "Show settings screen") }
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,每当我单击导航项时,composable()每次单击 logcat 中该函数的日志消息都会打印两次。我可能错过了文档中的一些内容。为什么会发生这种情况以及如何解决?
小智 1
您属于典型的副作用案例。在此处检查组合文档和重组: https ://developer.android.com/jetpack/compose/mental-model#parallel
根据您的代码,如果您想在单击“显示帐户按钮”时显示一次调试日志:
val navController = rememberNavController()
Scaffold(
bottomBar = {
Button(onClick = { navController.navigate("account") }) {
Text(text = "Display account")
}
}
){ innerPadding ->
NavHost(
navController = navController,
startDestination = "navigation",
modifier = Modifier.padding(innerPadding)
){
composable("home") { Log.d(TAG, "Show home screen") }
composable("account") {
val isLogPrinted = remember { mutableStateOf(false) }
if (!isLogPrinted.value) {
Log.d(TAG, "Show account screen")
isLogPrinted.value = true
}
}
composable("settings") { Log.d(TAG, "Show settings screen") }
composable("navigation") { Log.d(TAG, "Show navigation screen") }
}
}
Run Code Online (Sandbox Code Playgroud)
您还可以将日志放入“onClick”函数中。
| 归档时间: |
|
| 查看次数: |
2643 次 |
| 最近记录: |