使用getSupport Fragment时如何隐藏选项菜单

How to hide the option menu when using getSupportFragment

大家早上好,

我试图在某些 fragment.For 示例中隐藏选项菜单,我只想在促销页面上显示选项菜单

我在promotion.java

中添加代码
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater) {
    inflater.inflate(R.menu.toolbar_menu, menu);

    super.onCreateOptionsMenu(menu,inflater);
}

然后我想隐藏在其他片段上。

当我启动应用程序时,第一个片段就像

但是当我点击促销页面并点击返回菜单页面时,操作栏将是这样的

我正在使用 getSupportFragment 调用菜单项,这个问题只发生在使用 getSupportFragment 调用的片段上。

case R.id.menu:
                 getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new MenuFragment()).addToBackStack(null).commit();

在 onCreate 片段中添加 setHasOptionsMenu(true)

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}

然后

@Override
public void onPrepareOptionsMenu(Menu menu) {
MenuItem item=menu.findItem(R.id.action_search);//your id instead of action_search
item.setVisible(false);
}

如果您想从 Fragment 控制选项菜单,您必须在 FragmentonCreate() 中调用 setHasOptionsMenu(true):

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}

onCreateOptionsMenu()清除menu:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    menu.clear();
}

或者, 您可以通过覆盖 onPrepareOptionsMenu:

show/hide 特定菜单 item
@Override
public void onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);

    MenuItem item = menu.findItem(R.id.your_menu_item);
    item.setVisible(false);
}