我在我的活动视图xml中使用3个FrameLayouts,我动态插入不同的片段。其中许多片段贡献了ActionBar MenuItems。现在我有一种隐藏FrameLayout(将可见性设置为View.GONE)的情况,因此其中的Fragment变得不可见。然而它仍然贡献菜单项,因为片段似乎没有暂停或任何东西,所以我似乎无法调用主动隐藏操作栏项的方法。
作为一种解决方案,我现在只需将一个片段插入到FrameLayout中,当我将FrameLayout切换为不可见时,该片段没有菜单项。虽然这有效但对我来说感觉就像是黑客。隐藏任何操作栏菜单项的正确方法是什么?如果我只隐藏它所在的布局,片段会进入什么状态?
我正在使用兼容性库r6完成所有这些操作。
答案 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();
也许这可以帮到你。