简体   繁体   English

在 Jetpack Compose 中导航到没有先前脚手架的另一个屏幕

[英]Navigate to another screen without the previous scaffold in Jetpack Compose

My app has a main screen with a Scaffold and a BottomNavigation bar:我的应用程序有一个带有 Scaffold 和 BottomNavigation 栏的主屏幕:

 override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            val navController = rememberNavController()
            MyApplicationTheme {
                Scaffold(
                    bottomBar = {
                        BottomBar(navController = navController)
                    }
                ) {
                    NavigationGraph(navController = navController)
                }
            }
        }
    }

... ...

@Composable
fun NavigationGraph(navController: NavHostController){
    NavHost(navController = navController, startDestination = BottomMenuOption.Home.route) {

        composable(route = BottomMenuOption.Home.route) {
            HomeScreen(navController = navController)
        }

        composable(route = BottomMenuOption.Settings.settings) {
            SettingsScreen()
        }
        composable(route = BottomMenuOption.Profile.route) {
            ProfileScreen()
        }

       composable(route = "feature") {
           FeatureScreen()
       }
    }

}

FeatureScreen has it's own Scaffold with a topBar instead of a bottomBar and when I navigate to it from HomeScreen , I want to replace the previous one from the main screen and just see a topBar but instead, I'm seeing the two bars in the screen. FeatureScreen有自己的ScaffoldtopBar而不是 bottomBar 当我从HomeScreen导航到它时,我想从主屏幕替换前一个,只看到一个 topBar 但相反,我在屏幕上看到了两个栏.

@Composable
fun FeatureScreen() {
    Scaffold (
        topBar = {
            TopBar(" Feature Screen")
        }
            )  {

    }
}

Is it possible to accomplish this?有可能做到这一点吗? I'm thinking it could be done by just using a new Activity but ideally, I would like to keep the Single Activity approach.我认为它可以通过使用一个新的活动来完成,但理想情况下,我想保持单一活动的方法。

I would suggest creating a new function like this:我建议像这样创建一个新的 function:

@Composable
fun MainScaffold(
    topBar: @Composable (() -> Unit) = {},
    bottomBar: @Composable (() -> Unit) = {},
    content: @Composable (PaddingValues) -> Unit){
    Scaffold(
        bottomBar = bottomBar,
        topBar = topBar,
        content = content
    )
}

then, use this main scaffold in your screens:然后,在您的屏幕中使用这个主脚手架:

@Composable
fun HomeScreen(navController: NavHostController) {
    MainScaffold(
        bottomBar = { BottomBar(navController = navController) },
        content = {
        // content
     })
}

and in your feature screen:并在您的功能屏幕中:

@Composable
fun FeatureScreen() {
    MainScaffold (
        topBar = {
            TopBar(" Feature Screen")
        }
    )  {
        //content
    }
}

and in setContent并在 setContent

setContent {
       val navController = rememberNavController()
       VoiceAssistantJetpackComposeTheme {
           NavigationGraph(navController = navController)
       }}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用 navController 在 Jetpack Compose 中从一个屏幕导航到另一个屏幕? - How to navigate from a screen to another in Jetpack Compose using navController? 没有脚手架的jetpack compose中的TopAppBar给出错误 - TopAppBar in jetpack compose without scaffold gives error 从 Jetpack Compose 导航到 Fragment 以及从 Fragment 导航到 Jetpack Compose 屏幕 - Navigate from Jetpack Compose to Fragment and from Fragment to Jetpack Compose Screen 什么是脚手架? 喷气背包组成 - What is Scaffold? Jetpack compose 在 Scaffold Jetpack Compose 内的特定屏幕上隐藏顶部和底部导航器 - hide Top and Bottom Navigator on a specific screen inside Scaffold Jetpack Compose Jetpack Compose 导航结果 - Jetpack Compose navigate for result Jetpack compose 向前导航 - Jetpack compose navigate forward 如何使用jetpack compose导航到非底部栏屏幕? - How to navigate to a non bottom bar screen with jetpack compose? 如何在 Jetpack Compose 中从一个 NavHost 向上导航到另一个? - How to navigate up from one NavHost to another in Jetpack Compose? Jetpack 撰写导航关闭应用程序而不是返回上一个屏幕 - Jetpack compose navigation closes app instead of returning to previous screen
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM