【问题标题】:Navigation hierarchy on Android?Android上的导航层次结构?
【发布时间】:2015-04-04 17:42:43
【问题描述】:

我最近一直在研究 Android 使用的导航系统,目的是移植我的 iOS 应用程序,该应用程序使用包含多个 UINavigationControllers 的 UITabBarController。为了替换标签栏(在 Android 上不可用),我决定使用内置的 DrawerLayout

根据我的阅读,Android 中的导航通常通过创建Intent 来完成,为其提供附加功能,然后仅替换当前活动。这会自动确保后退按钮有效,如果启用,左上角的后退按钮可选。

但是,我不确定如何使用the navigation drawer 实现这种导航方式。本教程告诉我创建一个包含FrameLayoutListLayoutDrawerLayout,其中FrameLayout 将包含实际应用程序,ListLayout 将包含导航。这意味着当我使用上述方法进行“导航”时,它会替换活动,从而移除抽屉。

实现我想要的最佳方式是什么(支持后退按钮的基本导航,同时保持全局抽屉式导航菜单)?我能想到的可能选项是始终保持相同的活动并动态替换FrameLayout,但这意味着要渲染大量样板文件,并且可能需要破解来支持后退按钮(并且不会有动画:( ). 另一种选择是只在每个活动上呈现抽屉(通过子类化或其他方式),但这意味着如果用户导航很多,后退按钮“堆栈”会变得非常大。

我试图尽可能详细地解释我需要什么,但是很难解释这个概念。基本上,我想要类似于UITabBarController 中的UINavigationControllers 的东西。

【问题讨论】:

  • 我建议使用带有导航抽屉的应用程序的android studio模板,您可以使用片段作为主要组件来显示内容。后退按钮行为是可定制的,您不必将每个片段事务提交到 backstack。

标签: android ios navigation


【解决方案1】:

您可以将一个 Activity 与一个 NavigationDrawer 一起使用,并通过在该一个 Activity 中来回切换 Fragments 来为用户呈现不同的视图。您可以使用FragmentManager 在不同的Fragments 之间切换。 或者您可以使用多个Activities,它们都有一个NavigationDrawer

第二个选项可能听起来更困难,但实际上并非如此。您创建一个基础Activity,您的所有活动都从该基础继承,并让它们拥有自己的NavigationDrawer,没问题。

当然,两者之间有一些东西或完全不同的东西,但这是我能想到的最直接的方法。

您可能使用过的教程(关于行星的教程)有点误导,因为它假定了一个非常基本的应用程序结构。如果您只有很少的不同“屏幕”可以工作,那么对于非常复杂的应用程序来说它是不合适的(再次,在我看来)。

我一直选择第二个选项,因为使用活动/Intents 处理导航/后台堆栈更容易。 您可以将 loads of different flags 设置为您的 Intent 以影响他们的导航行为。

另请参阅 thisthat 文档。这些文档可能是在NavigationDrawer 模式不是很常见但仍然有用时编写的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 2019-11-11
    • 2011-05-17
    • 1970-01-01
    相关资源
    最近更新 更多