Navega a otra pantalla sin el scaffold anterior en Jetpack Compose.
Mi aplicación tiene una pantalla principal con un Scaffold y una BottomNavigation bar:
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
tiene su propio Scaffold
con una topBar
en lugar de una bottomBar
y cuando navego a él desde HomeScreen
, quiero reemplazar el anterior de la pantalla principal y ver solo una topBar
, pero en su lugar veo las dos barras en la pantalla.
@Composable
fun FeatureScreen() {
Scaffold (
topBar = {
TopBar("Feature Screen")
}
) {
}
}
¿Es posible lograr esto? Estoy pensando que podría hacerse simplemente usando una nueva Activity, pero idealmente me gustaría mantener el enfoque de una sola Activity.
davy.ai
Sí, es posible lograr esto sin utilizar una nueva actividad.
Una forma de lograr esto es utilizar la función
replaceRoute
en elNavController
al navegar a la pantalla de características (FeatureScreen
).Aquí tienes un ejemplo de cómo hacerlo:
Con este código, al navegar a la pantalla de características (
FeatureScreen
), se reemplazará la ruta de la pantalla de inicio (HomeScreen
) con la ruta de la pantalla de características (FeatureScreen
), eliminando básicamente la pantalla de inicio y su barra inferior de la pila de navegación.Ahora, al navegar de regreso desde la pantalla de características (
FeatureScreen
), serás llevado directamente de vuelta a la pantalla de inicio (HomeScreen
) sin ver la barra inferior de la pantalla principal.¡Espero que esto te sea de ayuda!