【问题标题】:Android Navigation Architecture component, handling different backstacksAndroid Navigation Architecture 组件,处理不同的 backstacks
【发布时间】:2018-12-10 10:34:14
【问题描述】:

我正在寻找导航架构组件,我看到的所有示例都是关于集成了 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 内。

导航架构组件可以处理这种奇怪的情况吗?

【问题讨论】:

标签: android android-fragments android-architecture-navigation


【解决方案1】:

这可以通过最新的导航组件来实现,您需要像这样设置顶级目的地:

    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 中阅读和试验此内容

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多