将项目动态添加到导航抽屉菜单

Dynamicly add items to NavigationDrawer menu

我有一个基本问题,令我惊讶的是我没有找到已经解决该问题的主题:我无法将元素添加到抽屉式导航菜单。

我保留了菜单参考:

    @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" 组中,但现在我尝试这样做。

layout/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>

menu/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" 的图标显示不正确,我用灰色方块代替了它。

谢谢,如果我没有搜索正确,请不要犹豫 link 我另一个话题。


好的,其中一个问题是我获取 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;
    }

在我的 activity 初始化上:

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

当我添加菜单项时:

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

更改菜单项后,如果您使用的是支持库,则需要调用 invalidateOptionsMenu() (or supportInvalidateOptionsMenu。 Android 将知道它需要重新创建它并再次调用 onCreateOptionsMenu(Menu)。您需要在那里扩充新菜单。

灰色图标是由于项目色调。您可以通过简单地调用 mNavigationView.setItemIconTintList(null).

来删除它