隐藏不可见片段中的操作栏菜单项

时间:2011-12-20 19:06:10

标签: android

我在我的活动视图xml中使用3个FrameLayouts,我动态插入不同的片段。其中许多片段贡献了ActionBar MenuItems。现在我有一种隐藏FrameLayout(将可见性设置为View.GONE)的情况,因此其中的Fragment变得不可见。然而它仍然贡献菜单项,因为片段似乎没有暂停或任何东西,所以我似乎无法调用主动隐藏操作栏项的方法。

作为一种解决方案,我现在只需将一个片段插入到FrameLayout中,当我将FrameLayout切换为不可见时,该片段没有菜单项。虽然这有效但对我来说感觉就像是黑客。隐藏任何操作栏菜单项的正确方法是什么?如果我只隐藏它所在的布局,片段会进入什么状态?

我正在使用兼容性库r6完成所有这些操作。

2 个答案:

答案 0 :(得分:1)

您应该可以在invalidateOptionsMenu()派生的活动中调用FragmentActivity,这会导致所有碎片onCreateOptionsMenu()方法再次被调用,并且您可以隐藏任何您不喜欢的菜单项再也不想看了。

答案 1 :(得分:1)

我遇到了类似的问题 - 一个带有两个FrameLayouts的Activity:

  • 在水平屏幕上旋转都可见,
  • 在垂直屏幕上只有一个可见。

    两者都包含带有一些菜单项的片段。从水平切换到垂直视图后,两个碎片中的菜单项都可见。我已经通过在onCreate()方法中使用popBackStack()函数解决了它,如下面的代码所示:

    getSupportFragmentManager().popBackStack();
    
    FragmentTransaction tr = getSupportFragmentManager().beginTransaction();
    tr.replace(getListContainer(), listFragment);
    if (detailPanelVisible) {
        Fragment detailFragment = createDetailFragment();
        tr.replace(getDetailContainer(), detailFragment);
    }
    tr.addToBackStack(null);
    tr.commit();
    

    也许这可以帮到你。