我有可以有不同片段的主机活动,它是某种SingleFragmentActivity
,所以用户在此活动内的不同片段之间导航,但在我的菜单中我有一个按钮,将用户带到另一个片段,所以我需要在更换片段时隐藏菜单,并在用户返回上一个片段时恢复它
我试图清除菜单,它可以工作,但我怎样才能恢复菜单而不是之前的片段?
在代码中,这看起来像
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
,我真的忘记了我在{{1}做了所有事情只调用一次。真是个愚蠢的错误。
所以现在一切都像魅力一样
这是代码。
在我的片段中onAttach
,我需要隐藏菜单。
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);
}
}
答案 0 :(得分:3)
您可以尝试使用menuItem.setVisible(false);
隐藏菜单项并再次显示menuItem.setVisible(true);