如何在NavigationView中获取菜单项?

use*_*095 37 android android-menu android-support-library android-design-library android-navigationview

<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"
    />
Run Code Online (Sandbox Code Playgroud)

android.support.design.library用于材料设计.

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

现在我无法获取菜单项NavigationView.

我试过了:

MenuItem logoutItem = (MenuItem) mNavigationView.findViewById(R.id.menu_logout);
logoutItem.setVisible(false);
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

我怎样才能做到这一点?

谢谢.

N J*_*N J 90

你可以通过NavigationView.getMenu()的方法得到它

Menu menuNav = mNavigationView.getMenu();
Run Code Online (Sandbox Code Playgroud)

然后你可以找到具体的项目

MenuItem logoutItem = menuNav.findItem(R.id.menu_logout);
Run Code Online (Sandbox Code Playgroud)

请参阅NavigationView的官方文档

  • 你是我的英雄 (2认同)

小智 7

我想你应该先得到这样的菜单:

navigationView.getMenu().findItem(R.id.login).setVisible(false);
Run Code Online (Sandbox Code Playgroud)

这段代码的主要方面是调用navigationView.getMenu()从中获取菜单,你将获得当前膨胀菜单的引用并调用findViewById(),之后你可以随意使用.

对于项目组ex: -

<group
android:id="@+id/group_1"
android:checkableBehavior="single"
android:visible="false">
...
Run Code Online (Sandbox Code Playgroud)

然后你可以使用以下方法控制:

navigationView.getMenu().setGroupVisible(R.id.group_1, true)
Run Code Online (Sandbox Code Playgroud)


Dha*_*mar 5

只是使用下面的方式

nav_draw = (NavigationView) findViewById(R.id.nav_draw);
nav_draw.getMenu().findItem(R.id.navigation_item_1).setVisible(false);
Run Code Online (Sandbox Code Playgroud)