我有一个在MainActivity中生成的设置菜单项。 MainActivity的所有工作都是包含实际完成工作的片段。这些片段有自己的操作栏项,它们按预期工作。
设置菜单项应显示/隐藏,具体取决于片段之间正在发生变化的特定条件,因此假设代码位于MainActivity上,则应为:
if (condition) menu.findItem(R.id.action_settings).setVisible(false);
else menu.findItem(R.id.action_settings).setVisible(true);
现在我想知道我应该在哪里放置代码,因为条件在片段之间发生了变化,但实际的菜单项在MainActivity上。
答案 0 :(得分:0)
我认为这对你有用
public boolean onPrepareOptionsMenu(Menu menu) {
// if nav drawer is opened, hide the action items
boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
return super.onPrepareOptionsMenu(menu);
}
答案 1 :(得分:0)
您的状况可能正常,您可以将其放入您的活动onPrepareOptionsMenu()
。
正如你所说,当你输入Activity时,只有一次被调用(有一些例外)。
您需要强制系统在切换片段时调用活动onPrepareOptionsMenu()
,并在任何地方完成 - 使用行invalidateOptionsMenu()
(或者,如果需要,getActivity().invalidateOptionsMenu()
)。
粘贴它的好处可能是碎片onResume()
,或者您认为您的状况状态已发生变化的任何其他点。
根据您的库,还有API< 11的支持方法supportInvalidateOptionsMenu()
。
每次要更改菜单时都应调用此选项。但是,如果您的片段只是添加某些项目到基础活动菜单,请查看this。