我正在努力克隆使用UITabBarViewController
作为“主要/外部/根”UIViewController
的iOS应用。每个选项卡都有一个UINavigationController
作为根管理UIViewController
个实例的导航堆栈。
我正在努力做两件事:
我搜索了一下,但过去几年这个话题似乎发生了很大变化。我尝试了一个只有一个Activity来管理所有内容的解决方案,但这需要维护单独的后台堆栈,并且似乎从这里的大多数用户那里得到了大拇指。
目前,我有一个“有点”工作的解决方案。据我了解,我目前的设置是:
BaseActivity
的单个ActionBarActivity
类。 drawer.xml
布局,其最外层项目为android:support.v4.widget.DrawerLayout
。FrameLayout
,这是我片段的容器。ListView
,这是抽屉本身。根据我对该应用的测试,此设置可以让我获得我想要的大部分内容。
onBackPressed()
中的BaseActivity
以正确弹出后台堆栈如果合适的话。我遇到的问题是:
我查看了Activity / Intent启动标志,但我不确定我是否真的得到了正在发生的事情。到目前为止,我的阅读使我尝试了以下步骤:
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
android:launchMode="singleInstance"
,或者像这样
android:launchMode="singleTop"
我面临的另一个奇怪的问题是,启动一个新的Activity似乎并没有像我期望的那样创建Activity返回堆栈。当我从活动1移动到活动2(暂时忽略片段后端堆栈维护)时,按下活动2中的后退按钮会关闭应用程序,这会让我感到困惑。
此类应用结构/导航是否有单一,当前最佳做法?
答案 0 :(得分:0)
好的方法是拥有1个活动并手动处理后台堆栈,因为Android只有1个堆栈。我已经多次这样做了,最后我创建了一个名为Tab Stacker的库来完成这项工作:每个标签的片段历史记录。
它是开源的并且完整记录,并且可以使用gradle轻松包含。您可以在github上找到该库:https://github.com/smart-fun/TabStacker
您还可以下载示例应用以查看该行为符合您的需求:
https://play.google.com/apps/testing/fr.arnaudguyon.tabstackerapp
如果您有任何疑问,请随时发邮件。