在使用 Jetpack Compose 的导航组件时弹出屏幕(从“返回堆栈”)由可组合表示返回上一个屏幕?

时间:2021-07-19 08:10:20

标签: android navigation android-jetpack-compose

我正在使用 Jetpack compose 的导航组件创建单个活动应用程序。我创建了可组合物来表示不同的屏幕,并将导航组件用作:

@InternalCoroutinesApi
@ExperimentalAnimationApi
@ExperimentalPagerApi
@RequiresApi(Build.VERSION_CODES.M)
@ExperimentalComposeUiApi
@Composable
fun ProgressNavigation(themeViewModel: ThemeViewModel?) {

    val navController = rememberNavController()
    NavHost(
        navController = navController,
        startDestination = Constants.SPLASH
    ) {composable(Constants.SPLASH) {
        ScreenAnimation {
            Splash(navController = navController)
        }
    }
        composable(Constants.HIW) {
            ScreenAnimation {
                LogoPage(false, true, navController = navController) { HowItWorks( navController = navController) }
            }
        }
.
.
.
}

假设我有 2 个屏幕(可组合)“SignUp”和“TnC”。 用户在注册屏幕中输入注册详细信息,然后进入 TnC 屏幕。回到 注册屏幕 通过在 TnC 屏幕中按下按钮,之前在注册中输入的详细信息应保持不变。我该如何实施?如果屏幕是活动,我会通过使用 onBackPressed 从后台堆栈中弹出屏幕来实现。 在我的情况下,我该怎么做?

1 个答案:

答案 0 :(得分:1)

在 SingUp 可组合中将 by remember 替换为 by rememberSaveable,然后您可以使用 navController.popBackStack() 如果您只是向后导航,或者您可以使用 popUpTo。如果您想进一步返回。

示例:

navController.popBackStack()
//or
navController.navigate("TnC") {
    popUpTo("SignUp")
}