2015-11-05 157 views
0

我有一个基本问题,我很惊讶我没有找到一个已经处理这个问题的主题:我添加元素到我的导航抽屉菜单时遇到困难。动态添加项目到NavigationDrawer菜单

我保留了菜单的参考:

@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); 

Idealy我想将它添加到“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” 项目的图标显示不正确,我有一个灰色的方块而不是它。

谢谢,如果我没有搜索correclty,请不要犹豫与我联系。


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

,并在我的活动初始化:

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

当我添加菜单项:

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

回答

0

改变后您需要拨打invalidateOptionsMenu()(或supportInvalidateOptionsMenu,如果您使用支持库)的菜单项。然后Android会知道它需要重新创建它,并会再次拨打onCreateOptionsMenu(Menu)。您需要在那里为新菜单充气。

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

+0

仍然不打印我的菜单项目。我的代码中必须有一个以上的缺陷。 setItemIconTintList(null)认为它的工作!谢谢 ! –

+0

您仍然需要在'onCreateOptionsMenu(菜单)'中正确填充菜单。我已经更新了我的答案,明确提及它。 –

+0

我有这种感觉,我不应该在onCreateOptionMenu中获得菜单,还有其他方法吗? –