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。
我有一个在 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。