动态添加项目到NavigationDrawer菜单

时间:2015-11-05 10:17:24

标签: android navigation-drawer

我有一个基本问题,我很惊讶我没有找到一个已经处理过这个问题的话题:我在导航抽屉菜单中添加元素时遇到了麻烦。

我保留了菜单的参考:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main_pager, menu);
        mMenu = menu;
        return true;
    }

在AsyncTask的回调中,我尝试以这种方式向菜单添加项目:

mMenu.add("title").setIcon(R.drawable.ic_group);

想想我想在“menu_group”组中添加它,但是现在我就这样试试。

  

布局/ activity_main_pager

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <include
        layout="@layout/app_bar_main_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main_pager"
        app:menu="@menu/activity_main_pager_drawer" />

</android.support.v4.widget.DrawerLayout>
  

菜单/ activity_main_pager_drawer

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:title="@string/menu_title_groups">
        <menu>
            <group android:id="@+id/menu_groups">
                <item
                    android:id="@+id/menu_add_group"
                    android:icon="@drawable/ic_group_add"
                    android:title="@string/menu_add_group" />
            </group>
        </menu>
    </item>
</menu>

奖金问题:我的菜单中“menu_add_group”项目的图标无法正确显示,我有一个灰色方块而不是它。

谢谢,如果我没有搜索相关内容,请不要犹豫,将我链接到另一个主题。

好的一个问题是我得到我的mMenu的方式。我添加了救世主列出的所有更正加上这一个:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.

        getMenuInflater().inflate(R.menu.main_pager, menu);
        return true;
    }

和我的活动init:

NavigationView nav = (NavigationView) mDrawer.findViewById(R.id.nav_view);
mMenu = nav.getMenu();

当我添加菜单项时:

menu.add("title").setIcon(R.drawable.ic_group);
supportInvalidateOptionsMenu();

1 个答案:

答案 0 :(得分:0)

更改菜单项后,您需要致电invalidateOptionsMenu()(或supportInvalidateOptionsMenu如果您正在使用支持库)。然后Android会知道它需要重新创建它并再次调用onCreateOptionsMenu(Menu)。你需要在那里给新菜单充气。

灰色图标归因于项目色调。您只需拨打mNavigationView.setItemIconTintList(null)即可将其删除。