如何暂时隐藏工具栏菜单
How to temporarily hide toolbar menu
我有主机 activity,它可以有不同的片段,它是某种 SingleFragmentActivity
,因此用户可以在此 activity 内的不同片段之间导航,但在我的菜单中我有将用户带到另一个片段的按钮,所以我需要在片段被替换时隐藏菜单,并在用户返回上一个片段时恢复它。
我试过清除菜单,它有效,但我怎样才能恢复菜单而不是以前的片段?
在代码中这看起来像
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mToolbarProvider = (ToolbarProvider) activity;
// mToolbarProvider.saveCurrentMenu();
mToolbarProvider.getToolbar().getMenu().clear();
}
catch (ClassCastException ex) {
Log.e(getString(R.string.error_tag), "Activty has to implement " + ToolbarProvider.class.getSimpleName() + " interface");
}
}
这个工作,但是当我再次回到需要菜单的片段时,我该如何恢复菜单,我试图保存菜单对象,但对我不起作用。
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mActivityController = (ActivityController) activity;
mToolbarProvider = (ToolbarProvider) activity;
/* Menu lastMenu = mToolbarProvider.restoreLastMenu();
if(lastMenu!=null) {
activity.onCreateOptionsMenu(lastMenu);
}*/
Menu toolBarMenu = mToolbarProvider.restoreLastMenu();
if(toolBarMenu!=null) {
mToolbarProvider.getToolbar().inflateMenu(R.menu.menu_main);
}
} catch (ClassCastException ex) {
Log.e(getString(R.string.error_tag), "Activty has to implement " + ActivityController.class.getSimpleName() + " interface");
}
}
最好是隐藏起来,需要的时候再显示。
请帮助实现这一点。
编辑
按照下面的建议,我试过这样做,但第一次没有用,但我已经将逻辑移到 onCreateView
中,我真的忘记了我在 [=16= 中做所有事情], 只调用一次。真是愚蠢的错误。
所以现在一切都很顺利。
这是代码。
在 onCreateView()
我需要隐藏菜单的片段中。
Menu menu = mToolbarProvider.getToolbar().getMenu();
MenuItem menuItem = menu.findItem(R.id.action_settings);
if(menuItem!=null) {
menuItem.setVisible(false);
mToolbarProvider.addHiddenItem(menuItem);
}
并且在所有菜单项都可见的主片段中。
List<MenuItem> hiddenItemsList = mToolbarProvider.getAllHiddenItems();
if(hiddenItemsList!=null && hiddenItemsList.size()>0) {
int size = hiddenItemsList.size();
for(int i=0;i<size;i++) {
hiddenItemsList.get(i).setVisible(true);
}
}
或者你创建类似 setAllItemsVisible()
的方法
您可以尝试使用 menuItem.setVisible(false);
隐藏菜单项并再次显示它们 menuItem.setVisible(true);
我有主机 activity,它可以有不同的片段,它是某种 SingleFragmentActivity
,因此用户可以在此 activity 内的不同片段之间导航,但在我的菜单中我有将用户带到另一个片段的按钮,所以我需要在片段被替换时隐藏菜单,并在用户返回上一个片段时恢复它。
我试过清除菜单,它有效,但我怎样才能恢复菜单而不是以前的片段?
在代码中这看起来像
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mToolbarProvider = (ToolbarProvider) activity;
// mToolbarProvider.saveCurrentMenu();
mToolbarProvider.getToolbar().getMenu().clear();
}
catch (ClassCastException ex) {
Log.e(getString(R.string.error_tag), "Activty has to implement " + ToolbarProvider.class.getSimpleName() + " interface");
}
}
这个工作,但是当我再次回到需要菜单的片段时,我该如何恢复菜单,我试图保存菜单对象,但对我不起作用。
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mActivityController = (ActivityController) activity;
mToolbarProvider = (ToolbarProvider) activity;
/* Menu lastMenu = mToolbarProvider.restoreLastMenu();
if(lastMenu!=null) {
activity.onCreateOptionsMenu(lastMenu);
}*/
Menu toolBarMenu = mToolbarProvider.restoreLastMenu();
if(toolBarMenu!=null) {
mToolbarProvider.getToolbar().inflateMenu(R.menu.menu_main);
}
} catch (ClassCastException ex) {
Log.e(getString(R.string.error_tag), "Activty has to implement " + ActivityController.class.getSimpleName() + " interface");
}
}
最好是隐藏起来,需要的时候再显示。
请帮助实现这一点。
编辑
按照下面的建议,我试过这样做,但第一次没有用,但我已经将逻辑移到 onCreateView
中,我真的忘记了我在 [=16= 中做所有事情], 只调用一次。真是愚蠢的错误。
所以现在一切都很顺利。
这是代码。
在 onCreateView()
我需要隐藏菜单的片段中。
Menu menu = mToolbarProvider.getToolbar().getMenu();
MenuItem menuItem = menu.findItem(R.id.action_settings);
if(menuItem!=null) {
menuItem.setVisible(false);
mToolbarProvider.addHiddenItem(menuItem);
}
并且在所有菜单项都可见的主片段中。
List<MenuItem> hiddenItemsList = mToolbarProvider.getAllHiddenItems();
if(hiddenItemsList!=null && hiddenItemsList.size()>0) {
int size = hiddenItemsList.size();
for(int i=0;i<size;i++) {
hiddenItemsList.get(i).setVisible(true);
}
}
或者你创建类似 setAllItemsVisible()
您可以尝试使用 menuItem.setVisible(false);
隐藏菜单项并再次显示它们 menuItem.setVisible(true);