如何隐藏片段中的菜单项?

时间:2017-02-27 01:18:02

标签: android fragment menuitem

我想在导航抽屉中的菜单中隐藏菜单项。 我尝试使用setHasOptionsMenu(true)然后添加方法

public boolean onPrepareOptionsMenu(Menu menu){
    //this is where i tried to hide the item
    menu.findItem(R.id.item).setVisible(false);
}

但它说这是空的。

有什么建议吗?

6 个答案:

答案 0 :(得分:3)

您应该在片段的onCreate()方法中调用setHasOptionsMenu(true),以允许您的片段处理菜单项。所以你可以在你的片段中做这样的事情:

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

然后,您可以覆盖片段中的onPrepareOptionsMenu方法:

@Override
public void onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
// You can hide the state of the menu item here if you call getActivity().supportInvalidateOptionsMenu(); somewhere in your code
    MenuItem menuItem = menu.findItem(R.id.item); 
    menuItem.setVisible(false);
    }

答案 1 :(得分:2)

我也遇到了同样的问题,如果您使用导航抽屉并想要使用菜单,那么您必须检查片段可见性: 请按照片段中的步骤操作,它对我有用:

1)检查片段可见性

boolean isMenuVisible  = false;
@Override
public void setMenuVisibility(boolean menuVisible) {
    try {
        super.setMenuVisibility(menuVisible);
        if (menuVisible && searchView != null) {
            isMenuVisible  = menuVisible;
        }
    } catch (Exception e) {
        CommonUtils.firebaseCrashReport(e);
    }
}

2)把这段代码

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

2然后只检查isMenuVisible的真值并使用菜单

@Override public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
if(isMenuVisible){
    MenuItem menuItem = menu.findItem(R.id.item);
    menuItem.setVisible(false);
}

}

答案 2 :(得分:1)

getActivity()invalidateOptionsMenu();将调用onPrepareOptionsMenu并更新您的菜单。

答案 3 :(得分:1)

这可以通过隐藏菜单项

来完成 在活动中:

navigationView = (NavigationView) findViewById(R.id.nav_view);`

片段:

Menu nav_Menu = context.navigationView.getMenu();<br/>
nav_Menu.findItem(R.id.item_id).setVisible(false);<br>

您可以将活动上下文传递给片段

答案 4 :(得分:0)

当您使用导航抽屉时,您必须从中获取MenuItem

NavigationView引用存储在onCreate

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(layoutId);

    ...

    nvDrawer = (NavigationView) findViewById(R.id.nvView);
}

隐藏onPrepareOptionsMenu中的MenuItem:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    boolean ret = super.onPrepareOptionsMenu(menu);

    MenuItem stateBtn = nvDrawer.getMenu().findItem(R.id.item);
    stateBtn.setVisible(true);

    return ret;
}

答案 5 :(得分:0)

在onCreate()调用中

setHasOptionMenu(true)

像这样检查onPrepareOptionsMenu()中的空项目。

@Override
public void onPrepareOptionsMenu(Menu menu) {
    MenuItem item=menu.findItem(R.id.menu_id);
    if(item!=null)
       item.setVisible(false);
}