我尝试使用jetpack编写导航,但在理解嵌套导航和布局scaffold时遇到了问题。
我有一个这样的应用程序屏幕结构
root
├─ A
├─ B <- Had a bottom navigation bar
│ ├─ C
│ ├─ D
这是粗略的规格
- 根将位于MainActivity中,并具有NavHost和scaffold。
- A和B中的应用程序栏将是不同的。
- 在B中有一个底部导航栏,可用于在C和D之间导航
我一直在浏览文档和StackOverflow,从我得到的信息来看,最好把脚手架放在NavHost之外。
但是,对于我的情况,如果我不能访问A & B中的脚手架,我如何更新A和B中的应用程序栏?我只能像下面的代码那样在脚手架中做一个分支
Scaffold(
scaffoldState = scaffoldState,
topBar = {
when {
currentDestination?.parent?.route == "Home" -> {
TopAppBar(
title = {
Text("Home")
},
)
}
currentDestination?.route == "Other screen" -> {
....
}
我还需要一个进入脚手架的状态。
那么,解决这类问题的最佳方法是什么呢?
2条答案
按热度按时间oyt4ldly1#
我有这个问题与
NavHost
和嵌套导航与multiScaffold
。以下是我的第一个解决方案:
根目录有自己的
NavHost
,包含两个独立的页面(A & B),这些页面有自己的功能。如果我们认为页面A是像Splash Screen一样的单个页面,我们有一个基本的
Scaffold
组件。如果我们认为B页是一种带有底部导航的多页,就像Instagram一样,那么在顶层,我们应该为自己的页面创建一个
NavHost
。这是我们的根:
AScreen
是一个可组合的,你可以在其中使用Scaffold
。BScreen
与AScreen
相同,但您可以为控制选项卡创建另一个NavHost
。实际上,不建议使用一个带有嵌套导航的
NavHost
,因为如果页面有标签和Instagram等功能,我们就会遇到麻烦。第二种解决方案是我们可以使用多个
fragment
和自己的NavHost, but it's not all based on
Composable`组件。正如您提到的,我遇到了这个问题,您可以获得有关this Github project的更多帮助
sqougxex2#
请在Medium上阅读这篇article文章,以了解使用底部导航栏和嵌套导航实现嵌套导航的正确方法。
我希望这对你有帮助。