如何在导航视图中获取子菜单的ID

时间:2015-09-14 18:15:43

标签: android android-navigation navigationview

我在导航栏中实现了新的导航视图。现在我想在几个登录和注销条件下隐藏并显示注销菜单项。

这是导航视图的菜单项

<group android:checkableBehavior="single">

    <item
        android:id="@+id/home"
        android:checked="false"
        android:icon="@drawable/drawer_ic_home"
        android:title="@string/home_string" />

    <item
        android:id="@+id/offer_coffee"
        android:checked="false"
        android:icon="@drawable/drawer_ic_offer_coffee"
        android:title="@string/offer_coffee_string" />


    <item
        android:id="@+id/share_coffee"
        android:checked="false"
        android:icon="@drawable/drawer_ic_share_coffee"
        android:title="@string/share_coffee_string" />
    <item
        android:id="@+id/take_coffee"
        android:checked="false"
        android:icon="@drawable/drawer_ic_take_coffee"
        android:title="@string/take_coffee_string" />


    <item
        android:id="@+id/offer_status"
        android:checked="false"
        android:icon="@drawable/drawer_ic_coffee"
        android:title="@string/offer_status"
        />


    <item
        android:id="@+id/about_us"
        android:checked="false"
        android:icon="@drawable/drawer_ic_about_us"
        android:title="@string/about_us_string" />

    <item
        android:id="@+id/logout"
        android:checked="false"
        android:icon="@drawable/logout"
        android:title="@string/logout" />

</group>

如果我不登录,我想隐藏Logout项目,如果我登录,那么我想显示此子菜单。

我看过几个链接,但是他们都在处理一组项目,但在我的情况下,我必须访问组中名为Logout的单个子菜单项。

3 个答案:

答案 0 :(得分:3)

整个菜单从上到下从0n编入索引。所以你有两组,每组5项,然后是0到9。

private boolean ifNotLoggedIn;
private NavigationView navigationView;

...
protected void onCreate(Bundle savedInstanceState) {

        ...

        if(ifNotLoggedIn){
            navigationView.getMenu().getItem(7).setVisible(false);
        }
    }

修改

正如@Moinkhan指出的那样,我们也可以使用findById()方法来做类似的事情。

navigationView.getMenu().getItem(R.id.logout).setVisible(false);

答案 1 :(得分:2)

只需添加以下代码即可。

我假设您正在使用isUserLoggedIn布尔变量来存储用户登录状态。

navigationView = (NavigationView) findViewById(R.id.nav); Menu menu = navigationView.getMenu(); if (! isUserLoggedIn) { menu.findItem(R.id.logout).setVisible(false); }

答案 2 :(得分:0)

感谢所有人帮助我,我正在做同样的事情。 但有些我如何设法以不同的方式做到这一点,就是点击菜单项的图块然后比较它,如果项目标题是注销,如果我登录(根据我的情况)做什么我想要。