android - Android Navigation Architecture 组件,处理不同的 backstacks
问题描述
我正在寻找导航架构组件,我看到的所有示例都是关于集成了 android 底部菜单的单个 Activity 应用程序,所以我想知道这个组件是否对我的情况有用。我的应用程序看起来像:一个下载一些数据的 SplashActivity,如果一切正常,启动 Main 活动。具有自定义底部导航的 MainActivity,允许用户导航到应用程序的 3 个不同部分(A、B、C),并且在每个部分中,用户可以导航更深的 iside 部分本身:
A部分:FragmentAOne -> FragmentATwo -> FragmentAThree
B部分:FragmentBOne -> FragmentBtwo
C部分:FragmenCOne -> FragmentCTwo -> FragmentCThree
并且在某些情况下,用户可以从其中的某些片段中打开另一个显示全屏 web 视图的活动。
现在,我需要每个部分都独立于其他部分(每个片段都应该有它的 backstack),所以用户可以在 FragmentAThree 内,导航到 FragmentCOne 并返回到 A 部分,仍然留在 FragmentAThree 内。
导航架构组件可以处理这种奇怪的情况吗?
解决方案
这可以通过最新的导航组件来实现,您需要像这样设置顶级目的地:
val drawerLayout : DrawerLayout? = findViewById(R.id.drawer_layout)
appBarConfiguration = AppBarConfiguration(
setOf(R.id.FragmentAOne, R.id.FragmentBOne, R.id.FragmenCOne),
drawerLayout)
可通过全局导航 UI 到达的目的地,例如底部导航或侧边导航,在用户看来都与层次结构的同一顶层相同。因此,它们是顶级目的地。FragmentAOne、FragmentBOne 和 FragmenCOne 在底部导航中,我们希望抽屉图标显示在这两个目的地上,因此它们是顶级目的地。
请注意,起始目的地始终被视为顶级目的地。如果您没有指定顶级目的地的列表,那么唯一的顶级目的地就是您的起始目的地。您可以在文档中了解有关 AppBarConfiguration 的更多信息。
您可以在导航代码实验室https://codelabs.developers.google.com/codelabs/android-navigation中阅读和试验此内容
推荐阅读
- docker - Docker buildx 命令行补全
- ros - ROS - 将超声波数据添加到 range_sensor_layer 的问题
- python - Python 日志记录中的静默错误
- jdbc - 卡夫卡连接 JDBC AS400
- tensorflow - LeakyRelu 有 tensorflow.js 实现吗?
- javascript - 如何在javascript中对一组对象进行分组?
- html - 内容页边距
- mongodb - 自动转储和恢复远程 MongoDB 数据库到容器
- python - 如何连续编写子进程的标准输入?
- chart.js - Charts.js 在不应该时自动添加逗号作为千位分隔符