我正在调查Jetpack Compose导航在我当前的Android应用程序中的使用情况。
我的应用程序"主页"屏幕使用androidx.compose.material.BackdropScaffold
,其frontLayerContent
设置如下:-
frontLayerContent = { MyNavigationHost(navController = navigator) }
这一切都按照应用程序中的顶级目的地的要求工作,因为这些顶级导航目的地被期望托管在背景中。
然而,从这些顶层屏幕(其容纳项目列表)中的每一个,用户应当能够点击列表项目并导航到背景不再可见的较低层屏幕,并且用户将看到具有向上箭头的简单工具栏,以向上导航一层回到父列表屏幕。
我已经创建了嵌套的导航目标,我可以达到,但我有两个问题,背景始终可见,即使在较低级别的细节屏幕
当用户返回时,他们导航到主屏幕(开始目的地),而不是他们查看列表时所在的实际高级屏幕。
我是否需要多个navHosts?其中一个navHosts包含背景frontContent中包含的所有顶级屏幕?
或者,我是否可以使用一个navHost并指定frontContentLayer应仅显示最高级别的屏幕?
- 更新**
我想达到的目标是:
顶层屏幕T1
,T2
,T3
,& T4
都列在我的应用程序主屏幕的背景上,其中背景前内容设置如上所示;例如:
frontLayerContent = { MyTopLevelNavigationHost(navController = navigator) }
当用户导航到任何一个顶层屏幕时,他们应该仍然能够看到"汉堡包"工具栏并访问背景。2所有这些在我的应用程序中都是按要求工作的。
然而,当用户导航到这些顶级屏幕中的任何一个之下的级别时,我需要用显示向上箭头和基本工具栏标题的简单工具栏替换"汉堡包"工具栏。
我意识到我需要第二个NavHost用于这些"较低级别"屏幕,允许用户导航单独的子导航图,并让我用显示向上箭头和基本工具栏标题的简单工具栏替换"汉堡包"工具栏。我不知道如何实现第二个"较低级别" navHost。
我不知道如何"覆盖" backdropscaffold的frontcontent以显示较低级别的屏幕。
1条答案
按热度按时间s8vozzvw1#
我是否需要多个navHosts?-〉是
我认为正确的方法是为背景设置一个导航图,将scaffold状态传递到前面层中显示的每个目的地,以便在必要时关闭它,并为背景scaffold设置一个顶级控制器,以防需要更改背景层中显示的内容。
//编辑开始
我真的想给予你一个代码示例,但这会占用我太多的时间。然而,我会把你能做的事情分成可理解的步骤,以达到你想要的。
您可以轻松访问控制器,而无需将其传递到每个屏幕,方法如下:
在构建NavHost时,将控制器作为LocalNavigationManager.current传递
我希望这能有所帮助,如果你有任何其他问题,我会再次编辑。
Very Late Edit for Hector 's Comment我所说的子导航图和典型的导航图没有什么不同。只需为你的前层创建另一个NavHost,而不是直接在前层调用一个可组合的,调用你创建的导航图。因为前层和后层都有不同的导航主机,它们仍然可以独立导航。