[英]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
有自己的Scaffold
和topBar
而不是 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.