Android - 导航回选项卡片段

时间:2014-04-24 15:21:24

标签: android android-actionbar android-tabs

我的操作栏包含两个标签(企业列表和商家地图)。如果有人从列表中选择我想隐藏标签并显示该商家'页。如果用户返回,则会弹出业务片段,并且应再次显示选项卡。

使这项工作的最佳方法是什么?到目前为止,使用以下代码,如果我弹出业务片段,我会有一个莫名其妙的递归循环:(

所以想象一下,我正在显示BusinessListFragment标签。我选择了一个企业,交换片段,在onPause()中我将导航模式设置为标准。点击后退键,在BusinessListFragment的onResume()中我有:

    ActionBar ab = mHostingActivity.getSupportActionBar();
    if (ab.getNavigationMode() == ActionBar.NAVIGATION_MODE_STANDARD)
        ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

应该带回标签,但应用程序会冻结循环。标签肯定仍然存在。也许我在我的代码中做了其他奇怪的事情(我确定我不是),或者当设置导航模式时Android可能会有些奇怪吗?

编辑:我已经了解到只需将导航模式设置为标签似乎实际上选择了第一个标签 - 我相信这将解释递归。有趣的!

1 个答案:

答案 0 :(得分:0)

好的,这需要一段时间来弄明白,但希望这将有助于未来的googlers:D

似乎最好的做法是永远不要尝试隐藏/显示标签,方法是在标签片段的onResume / onPause中设置导航模式,或者在其中的任何位置设置导航模式。

因此,我在详细(业务)片段的onResume()中将模式设置为Standard。通常情况下,如果没有更多层次的导航层从细节片段中遍历,可以简单地将模式设置回细节片段的onPause()中的Tabs - 计算背压或向上压力。

但是在我的情况下,您可以单击业务页面中的元素以启动另一个片段(堆栈计数为3),这意味着我无法在onPause()中“打开”选项卡,并找到最佳解决方案它在onDetach()中。这应该意味着只有当细节片段实际从堆栈中弹出时才会打开选项卡。

希望这个解决方案是准确的,我已经玩弄了很多想法,包括后台监听器和覆盖onBackPressed,但对我来说这似乎是最好的选择。