撰写导航到已在后台堆栈中的屏幕

Met*_*hew 3 android kotlin android-jetpack-navigation android-jetpack-compose

我想要这样的导航:

-我有三个屏幕:“登录”、“注册”和“帐户恢复”;

-从每个屏幕,我可以导航到任何其他屏幕;

-当我从“登录”屏幕导航到“注册”,然后返回“登录”(单击“转到登录”按钮)时,我希望拥有与开始时相同的屏幕,而不是新屏幕。

现在,每次当我返回“登录”时,我都会看到一个新屏幕:(

我的导航主机:

    val navController = rememberNavController()

    NavHost(navController = navController, startDestination = Screens.Login.route) {
        composable(route = Screens.Recovery.route) {
            RecoveryScreen(navController = navController)
        }
        composable(route = Screens.Login.route) {
            LoginScreen(navController = navController)
        }
        composable(route = Screens.Registration.route) {
            RegistrationScreen(navController = navController)
        }
    }
Run Code Online (Sandbox Code Playgroud)

指导我怎么挖?

mas*_*aya 5

我迟到了,但它可能会帮助别人检查 GitHub 中的 Jetnews 示例应用程序,像这样导航

navController.navigate(JetnewsDestinations.HOME_ROUTE) {
            // Pop up to the start destination of the graph to
            // avoid building up a large stack of destinations
            // on the back stack as users select items
            popUpTo(navController.graph.findStartDestination().id) {
                saveState = true
            }
            // Avoid multiple copies of the same destination when
            // reselecting the same item
            launchSingleTop = true
            // Restore state when reselecting a previously selected item
            restoreState = true
        }
Run Code Online (Sandbox Code Playgroud)

这可以避免多个返回堆栈,还可以恢复先前打开的目的地的状态