有没有办法使用 Jetpack Compose 在处理程序中进行导航?
Is there a way to make a navigation work inside a handler using Jetpack Compose?
我正在尝试使用 Jetpack Compose 创建启动画面。我创建了我的导航并且我有我所有的 ID 去不同的屏幕,但我不能让一个屏幕导航到 Hadler 内部的另一个。你们怎么看?
@Composable
fun GoToMainScreen(navController: NavHostController){
Handler(Looper.getMainLooper()).postDelayed(object : Thread() {
override fun run() {
navController.navigate("main_screen")
Log.i("LOOPER", "It got here!")
}
}, 4000L)
}
我试过了,在我的例子中,它可以很好地使用你的可组合项:
val navController = rememberNavController()
NavHost(navController = navController, startDestination = "profile") {
composable("profile") {
GoToMainScreen(navController)
}
composable("main_screen") { Text("main_screen") }
}
不确定您的情况有何不同,但在 compose 中我们通常不需要 Handler
首先,您需要包装处理程序的创建LaunchedEffect
,否则您的处理程序可能会在屏幕重组的情况下创建多次。
并且在 LaunchedEffect
中我们可以使用协同程序,所以用更少的代码看起来像:
@Composable
fun GoToMainScreen(navController: NavHostController) {
LaunchedEffect(Unit) {
delay(2000L)
navController.navigate("main_screen")
}
}
如果这仍然不能帮助确保提供 minimal-reproducible-example,类似于我的第一个代码块。
我正在尝试使用 Jetpack Compose 创建启动画面。我创建了我的导航并且我有我所有的 ID 去不同的屏幕,但我不能让一个屏幕导航到 Hadler 内部的另一个。你们怎么看?
@Composable
fun GoToMainScreen(navController: NavHostController){
Handler(Looper.getMainLooper()).postDelayed(object : Thread() {
override fun run() {
navController.navigate("main_screen")
Log.i("LOOPER", "It got here!")
}
}, 4000L)
}
我试过了,在我的例子中,它可以很好地使用你的可组合项:
val navController = rememberNavController()
NavHost(navController = navController, startDestination = "profile") {
composable("profile") {
GoToMainScreen(navController)
}
composable("main_screen") { Text("main_screen") }
}
不确定您的情况有何不同,但在 compose 中我们通常不需要 Handler
首先,您需要包装处理程序的创建LaunchedEffect
,否则您的处理程序可能会在屏幕重组的情况下创建多次。
并且在 LaunchedEffect
中我们可以使用协同程序,所以用更少的代码看起来像:
@Composable
fun GoToMainScreen(navController: NavHostController) {
LaunchedEffect(Unit) {
delay(2000L)
navController.navigate("main_screen")
}
}
如果这仍然不能帮助确保提供 minimal-reproducible-example,类似于我的第一个代码块。