【问题标题】:How to get the id of Sub Menu in Navigation view如何在导航视图中获取子菜单的 id
【发布时间】:2015-09-16 17:16:24
【问题描述】:

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

这是我的导航视图菜单项

<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 的单个子菜单项。

【问题讨论】:

  • 好像不太对劲。 Navigation Drawer 基本上是ListView,您在上面放置的代码用于工具栏菜单。你确定你在这里输入了正确的代码吗?
  • 它是一种新的导航视图设计模式,见这里stackoverflow.com/questions/30695038/…

标签: android android-navigation navigationview


【解决方案1】:

整个菜单的索引从上到下从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 投赞成票 .. 为您的回答 .. 但使用索引位置不是一个好习惯,而我们可以按项目 ID 使用它..
  • 这给了我错误 navigationView.getMenu().getItem(7).setVisible(false);
【解决方案2】:

很简单,只需添加以下代码即可。

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

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

【讨论】:

    【解决方案3】:

    感谢大家帮助我,我正在做与上面回答的完全相同的事情。 但是我如何设法以不同的方式做到这一点,那就是点击菜单项的图块,然后比较它,如果项目标题是注销,并且如果我已登录(根据我的情况)做任何事情我想。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多