Android - 主设置菜单 activity

Android - Settings menu of the main activity

我有一个在 MainActivity 中生成的设置菜单项。 MainActivity 的所有工作都是包含实际完成工作的片段。这些片段有自己的操作栏项目,它们按预期工作。

设置菜单项应该show/hide,取决于片段之间变化的特定条件,所以假设代码在MainActivity上,它应该是:

if (condition) menu.findItem(R.id.action_settings).setVisible(false);       
else menu.findItem(R.id.action_settings).setVisible(true);

现在我想知道我应该把代码放在哪里,因为片段之间的条件会发生变化,但实际的菜单项在 MainActivity 上。

我认为这对你有用

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);
}

你的情况可能还可以,你可以把它放在你Activity的onPrepareOptionsMenu()中。 正如您所说,当您输入 Activity 时,它只会被调用一次(有一些例外)。

您需要强制系统在切换片段时调用 Activity onPrepareOptionsMenu(),并且可以从任何地方使用 invalidateOptionsMenu() 行(或者,如果需要的话) , getActivity().invalidateOptionsMenu()).

粘贴它的好处可能是片段 onResume(),或者您认为您的状况状态发生变化的任何其他点。

根据您的库,还有一种支持 API<11 的方法称为 supportInvalidateOptionsMenu()

每次您希望更改菜单时都应调用此方法。但是,如果您的片段只是 添加 一些项目到基础 activity 菜单,请查看 this