Android 导航架构组件 - 导航架构组件是不是意味着仅使用单个活动?

Posted

技术标签:

【中文标题】Android 导航架构组件 - 导航架构组件是不是意味着仅使用单个活动?【英文标题】:Android Navigation Architecture Component - Is Navigation Architecture Component meant to use Single Activity Only?Android 导航架构组件 - 导航架构组件是否意味着仅使用单个活动? 【发布时间】:2018-12-03 13:52:00 【问题描述】:

我目前正在学习新的 Android 导航架构组件 (https://developer.android.com/topic/libraries/architecture/navigation/)。

我有点混淆它的动机和概念,这是我的不确定性:

    Android 导航架构组件 是否旨在消除在单个应用程序中使用多个 Activity 的需要?也就是说,整个应用只需要一个 Activity,其他页面都是 Fragment? 在应用中使用Multiple Activity,但同时使用Android Navigation Architecture Component 来导航Fragment,是否违反了Android Navigation Architecture Component 的宗旨?

问题 2 的示例场景

【问题讨论】:

【参考方案1】:

理论上,导航库支持您可能想要使用的任何架构。开箱即用,它可以将活动和片段作为导航目的地处理,但您可以通过implementing your own Navigator 插入自己的解决方案(例如,请参阅this article)。

但是,引用/转述自Google I/O talk on Navigation:

我的 Activity 究竟要做什么?

目前,有些应用非常依赖 Activity,有些应用非常依赖 Fragment,或者完全位于不同的系统中。我们正在走向一个模型,在这个模型中 Activity 更像是您的应用程序的入口点,而不是您的应用程序内容的所有者。它实际上只是存储全局状态,例如像导航抽屉或底部栏这样的全局导航。

因此,Google 确实建议您的应用只使用几个活动,因为您只需要它们作为入口点。例如,您可以让一个从启动器打开,另一个通过深层链接打开。之后,当您的应用启动时,您可以使用 Fragments 在其中执行所有其他操作。

总结并直接回答您的两个问题:

    导航架构组件本身并不是“旨在消除使用多个活动的需要”,但 Google 建议您在使用它时这样做。

    您绝对仍然可以将多个活动和多个片段混合在一起使用。如果您愿意,您甚至可以使用具有纯基于视图的导航的单个 Activity。全取决于你。如果您发现 Navigation 库与您构建应用的方式相结合很有用,请使用它。

    库的工具对于自定义目标可能不是那么好(例如,可视化编辑器可能暂时只支持活动和片段),但您可以从代码中随意使用它。

【讨论】:

我只是在使用导航-android。我对一个问题感到困惑。当我在我的应用程序中使用底部导航时,当我导航到另一个片段时,底部导航仍然存在。无论如何要处理这个问题吗?我只是不希望底部导航在我的新片段中仍然可见

以上是关于Android 导航架构组件 - 导航架构组件是不是意味着仅使用单个活动?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 Android 导航架构组件(Android Jetpack)有条件地设置 startDestination?

Android 导航架构组件:如何将捆绑数据传递给 startDestination

导航架构组件 - 带有 lambda 表达式的动作导航

导航架构组件 - 未生成 DestinationFragmentArgs

导航架构组件 - 使用 Fragment 将参数数据传递给 startDestination

如何使用导航架构组件查找子片段