45
<android.support.design.widget.NavigationView
    android:id="@+id/drawer_nav"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar"
    app:headerLayout="@layout/drawer_header"
    app:menu="@menu/menu_drawer"
    />

我正在使用android.support.design.library材料设计。

我想要的是在用户未登录时隐藏一些菜单项。

现在我无法将菜单项放入NavigationView.

我试过了:

MenuItem logoutItem = (MenuItem) mNavigationView.findViewById(R.id.menu_logout);
logoutItem.setVisible(false);

但它不起作用。

我怎样才能做到这一点?

谢谢。

4

5 回答 5

105

您可以通过NavigationView.getMenu()的方法获得它

Menu menuNav = mNavigationView.getMenu();

然后你可以找到特定的项目

MenuItem logoutItem = menuNav.findItem(R.id.menu_logout);

参见NavigationView 的官方文档

于 2015-07-07T10:10:07.710 回答
9

我认为你应该首先得到这样的菜单:

navigationView.getMenu().findItem(R.id.login).setVisible(false);

此代码的主要方面是调用 navigationView.getMenu() 从中获取菜单,您将获得当前膨胀菜单的引用并调用 findViewById() ,然后您可以随心所欲。

对于项目组 ex:-

<group
android:id="@+id/group_1"
android:checkableBehavior="single"
android:visible="false">
...

然后您可以使用以下方法控制它:-

navigationView.getMenu().setGroupVisible(R.id.group_1, true)
于 2015-07-07T10:22:23.377 回答
6

只需使用以下方式

nav_draw = (NavigationView) findViewById(R.id.nav_draw);
nav_draw.getMenu().findItem(R.id.navigation_item_1).setVisible(false);
于 2015-07-07T10:19:34.043 回答
0

您可以通过

navigationView.Menu.GetItem(menu_index)
于 2019-12-18T19:06:18.033 回答
0
View navHeader=navigationView.getHeaderView(0);[![enter image description here][1]][1]

navMenu=navigationView.getMenu();

  1. 项目清单

    //work for login and logout menu
    if (MyPreferences.getBoolean(BaseActivity.this,ConstantValues.KEY_IS_LOGIN)){
        navMenu.getItem(0).setVisible(false);
        navMenu.getItem(9).setVisible(true);
    }else {
        navMenu.getItem(0).setVisible(true);
        navMenu.getItem(9).setVisible(false);
    }
    
于 2019-12-20T12:59:03.040 回答