我最近一直在研究Android用来移植我的iOS应用程序的导航系统,该应用程序使用包含多个UINavigationController
的UITabBarController
。为了替换选项卡栏(在Android上不可用),我决定使用内置的DrawerLayout
。
据我所知,Android中的导航通常是通过创建一个Intent
来完成的,为它提供额外的功能,然后只替换当前的活动。这会自动确保后退按钮工作,如果启用,也可以选择左上角的后退按钮。
但是,我不确定如何使用导航抽屉实现这种导航方式。本教程告诉我创建一个包含FrameLayout
和ListLayout
的DrawerLayout
,其中FrameLayout
将包含实际应用程序,ListLayout
将包含导航。这意味着,当我使用上面描述的方法"导航"时,它将替换活动,从而删除抽屉。
实现我想要的功能(支持后退按钮的基本导航,同时维护全局抽屉导航菜单)的最佳方式是什么?我能想到的可能选项是始终保持相同的活动并动态替换FrameLayout
,但这意味着要渲染大量样板,可能还需要破解以支持后退按钮(并且不会有动画:()。另一种选择是只在每个活动上呈现抽屉(通过子类化或其他方式),但这意味着如果用户多次导航,返回按钮"堆栈"将变得相当大。
我试图尽可能详细地解释我需要什么,但很难解释这个概念。基本上,我想要一些类似于UITabBarController
中的UINavigationController
的东西。
您可以将一个"活动"与一个"NavigationDrawer
"组合在一起,并通过在该"活动"中来回切换Fragments
向用户呈现不同的视图。您可以使用FragmentManager
在不同的Fragments
之间切换。或者,您可以使用多个Activities
,它们都有一个NavigationDrawer
。
第二种选择听起来可能更困难,但事实并非如此。您创建了一个基础Activity
,所有活动都从中继承,并让它们拥有自己的NavigationDrawer
,这没问题。
当然有一些介于两者之间或完全不同的东西,但这是我能想到的最直接的方法。
你可能使用过的教程(关于行星的教程)有点误导,因为它假设了一个非常基本的应用程序结构。如果你只有一些不同的"屏幕"可以工作,那么对于一个非常复杂的应用程序来说,这是不合适的(同样,在我看来)。
我一直选择第二个选项,因为使用Activities/Intents
处理导航/后台操作更容易。您可以为Intent
设置大量不同的标志来影响它们的导航行为。
另请参阅此文档和该文档。这些文档可能是在NavigationDrawer
模式不那么常见的时候编写的,但它们仍然很有用。