Сер*_*гей 8 android-jetpack-navigation
为什么导航可组合项调用两次?如果我在文本上设置断点,应用程序运行时我将停止两次。谢谢您的回答。
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val navController = rememberNavController()
var i: Int = 0
NavHost(navController = navController, startDestination = "s1") {
composable("s1") {
i++
Text("$i")
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
NavHost是可组合的,所以自然可以多次组合和重组!如果您想在可组合生命周期中执行一次性操作,请使用LaunchedEffect.
fun LaunchedEffect(
vararg keys: Any?,
block: suspend CoroutineScope.() -> Unit
)
Run Code Online (Sandbox Code Playgroud)
LaunchedEffect是一个可组合函数,因此它只能在其他可组合函数中使用。它用于触发副作用,仅当键更改时才执行一次。
更改您的代码如下:
setContent {
val navController = rememberNavController()
var i: Int = 0
NavHost(navController = navController, startDestination = "s1") {
composable("s1") {
LaunchedEffect(Unit){
i++
}
Text("$i")
}
}
Run Code Online (Sandbox Code Playgroud)
我使用Unit作为 LaunchedEffect 的参数。由于 LaunchedEffect 块每次参数更改时都会重新启动,因此它的块只会运行一次。
阅读本文以更好地了解可组合项的生命周期
| 归档时间: |
|
| 查看次数: |
1129 次 |
| 最近记录: |