Android:带导航堆栈的选项卡式应用程序

Android:带导航堆栈的选项卡式应用程序,android,android-intent,android-fragments,Android,Android Intent,Android Fragments,我正在克隆一个iOS应用程序,它使用UITabBarViewController作为主/外部/根UIViewController。每个选项卡都有一个UINavigationController作为根,用于管理UIViewController实例的导航堆栈 我正在努力做两件事: 复制iOS应用程序的功能。 以真正的Android方式这样做,即在非iOS世界中不强制采用iOS模式。 我已经搜索了很多地方,但是这个话题在过去几年里似乎改变了很多。我尝试了一个解决方案,它有一个单一的活动来管理所有东西,

我正在克隆一个iOS应用程序,它使用UITabBarViewController作为主/外部/根UIViewController。每个选项卡都有一个UINavigationController作为根,用于管理UIViewController实例的导航堆栈

我正在努力做两件事:

复制iOS应用程序的功能。 以真正的Android方式这样做,即在非iOS世界中不强制采用iOS模式。 我已经搜索了很多地方,但是这个话题在过去几年里似乎改变了很多。我尝试了一个解决方案,它有一个单一的活动来管理所有东西,但需要维护单独的后台堆栈,并且似乎受到了这里大多数用户的反对

目前,我有一个可行的解决方案。据我所知,我目前的设置是:

扩展ActionBarActivity的单个BaseActivity类。 到目前为止,我的应用程序中的所有活动只有2个,但计划为5个扩展此类。 此基本活动加载一个drawer.xml布局,该布局的最外层项目是android:support.v4.widget.DrawerLayout。 其中包括: FrameLayout,它是我的片段的容器。 列表视图,即抽屉本身。 根据我对应用程序的测试,这个设置让我得到了我想要的大部分东西

当我使用抽屉导航到其他活动时,将加载正确的活动。 当我通过屏幕上的控件导航到更深的片段时,会推送正确的新片段,并且我已经在BaseActivity中覆盖了OnBackPress,以便在适当的情况下正确弹出后堆栈。 我遇到的问题是:

启动应用程序并显示活动1:Fragment 1。我点击一个项目,转到活动1:片段2,效果很好。 我使用抽屉启动活动2,活动2:片段1如图所示。到目前为止,一切顺利。 我使用抽屉返回到至少这是我对现有活动1的意图,并显示活动1:Fragment 1。 我已经研究了Activity/Intent启动标志,但我不确定我是否真的了解发生了什么。到目前为止,我的阅读让我尝试了以下步骤:

切换活动时,将其标志设置为: intent.setFlagsInt.FLAG_活动重新排序_至_前端; 在my AndroidManifest.xml中,设置活动启动模式如下: android:launchMode=singleInstance,或者类似这样 android:launchMode=singleTop 我面临的另一个奇怪的问题是,启动一个新活动似乎并没有像我预期的那样创建活动后台。当我从活动1移动到活动2时,忽略了片段后台堆栈维护的缺失,按下活动2的后退按钮关闭应用程序,这让我感到困惑


对于这种类型的应用程序结构/导航,是否有单一的、当前的最佳实践

好的方法是有1个活动,并手动处理后台堆栈,因为Android只有1个堆栈。我已经这样做了好几次,最后我创建了一个名为Tab Stacker的库来完成这项工作:为每个选项卡创建一个片段历史

它是开源的,有完整的文档记录,可以很容易地与gradle一起包含。您可以在github上找到该库:

您还可以下载示例应用程序,查看行为是否符合您的需要:


如果您有任何问题,请不要犹豫,立即投递邮件。

我使用抽屉返回-这是什么意思?导航抽屉中的物品应该放在一个特定的地方,例如联系人,而不是放在一个合乎逻辑的地方,例如回到你以前所在的地方。对于这种类型的应用程序结构/导航,是否有单一的、当前的最佳实践?-请记住,这里只有一小部分人知道您的iOS结构/导航是什么,因为这里并不是每个人都是iOS开发人员。@Commonware Back as in return to not Back as in the navigation stack。而且,我觉得我很好地解释了结构。这是一组同级选项卡,每个选项卡都维护自己的导航堆栈,当返回到该选项卡时,应该维护该堆栈。这是一组同级选项卡,每个选项卡都维护自己的导航堆栈-选项卡通常不会像您在安卓中描述的那样使用。您能建议一个替换范例吗?我正在移植一个iOS应用程序。它有5个不同的部分,每个部分都有导航堆栈。在安卓系统中,用什么恰当的习惯用法来表示这一点?我看了一下Facebook应用程序,他们在屏幕顶部有一个图标栏,你可以点击或滑动。但是如果我读了一篇这样的故事,在News Feed选项卡中导航1级,我必须返回根屏幕以切换到我的通知。这对我来说似乎对用户不友好,但Android上就是这样吗?你们将这些标签转换成导航抽屉条目的方法似乎非常合理,除了每个标签都有导航堆栈的概念。这在Android中不是一个典型的模式,在Web浏览器之外。