2016-11-28 66 views
0

我是新來的Android開發。我使用android studio默認項目模板Navigation Drawer Activity創建了一個新項目。的Android onCreateOptionsMenu則findItem得到空

我添加調試信息如下:

public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 

    MenuItem navCamera = menu.findItem(R.id.nav_camera); 

    if(navCamera != null) { 
     Log.d("MainActivity", "Not null"); 
    } 

    return true; 
} 

爲什麼我不能讓菜單項的對象?

main.xml中

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 
<item 
    android:id="@+id/action_settings" 
    android:orderInCategory="100" 
    android:title="@string/action_settings" 
    app:showAsAction="never" /> 

activity_main_drawer.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

<group android:checkableBehavior="single"> 
    <item 
     android:id="@+id/nav_camera" 
     android:icon="@drawable/ic_menu_camera" 
     android:title="Import" /> 
    <item 
     android:id="@+id/nav_gallery" 
     android:icon="@drawable/ic_menu_gallery" 
     android:title="Gallery" /> 
    <item 
     android:id="@+id/nav_slideshow" 
     android:icon="@drawable/ic_menu_slideshow" 
     android:title="Slideshow" /> 
    <item 
     android:id="@+id/nav_manage" 
     android:icon="@drawable/ic_menu_manage" 
     android:title="Tools" /> 
</group> 

<item android:title="Communicate"> 
    <menu> 
     <item 
      android:id="@+id/nav_share" 
      android:icon="@drawable/ic_menu_share" 
      android:title="Share" /> 
     <item 
      android:id="@+id/nav_send" 
      android:icon="@drawable/ic_menu_send" 
      android:title="Send" /> 
    </menu> 
</item> 

</menu> 
+1

添加R.menu.main文件 – Pavya

+1

這裏 – Rudresh

回答

0

抱歉上面的回答,我完全不看你的問題。你可以用你的lib

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ... 
    //other stuff here 
    ... 
    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 

    // get menu from navigationView 
    Menu menu = navigationView.getMenu(); 

    // find MenuItem you want to change 
    MenuItem nav_camara = menu.findItem(R.id.nav_camara); 

    // set new title to the MenuItem 
    nav_camara.setTitle("NewTitleForCamera"); 
    // Set your icon menu here 

    // do the same for other MenuItems 
    .... 

    // add NavigationItemSelectedListener to check the navigation clicks 
    navigationView.setNavigationItemSelectedListener(this); 

} 
+0

感謝。試過了,仍然沒有運行Log.d語句。它仍爲空 – bns

+0

謝謝。它現在有效。爲什麼我無法在onCreateOptionsMenu中獲取它? – bns

+0

在'onCreateOptionsMenu'中帶'getMenuInflater()。inflate(R.menu.main,menu);',你可以用這個菜單看到,沒有佈局'activity_main_drawer.xml'。 'NavigationView'中的'activity_main_drawer.xml',你必須在這個佈局中找到'MenuItem'。 –

0

如果你想與菜單項工作使用onNavigationItemSelected功能如下。

@Override 
public boolean onNavigationItemSelected(MenuItem item) { 

    int id = item.getItemId(); 

    switch (id) { 
     R.id.nav_camera: 
      Log.d("MainActivity", "Not null"); 
     break; 
    } 
} 

onCreateOptionsMenu如下:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.dashboard, menu); 
    return true; 
} 
+0

謝謝您粘貼找到menu.xml文件中onCreate()NavigationView並設置圖標。但我想使用iconify將圖標設置爲菜單。 – bns

+0

@bns能否請您詳細說明以上評論,因爲根據我的觀點,您必須根據您的問題得到合理的答案。 –

+0

我想使用iconify,https://github.com/JoanZapata/android-iconify來設置菜單項上的圖標。爲了達到這個目的,它說它似乎使用下面的代碼--- menu.findItem(R.id.share).setIcon( new IconDrawable(this,FontAwesomeIcons.fa_share) .colorRes(R.color.ab_icon) .actionBarSize()); 這給我介紹了上述問題 – bns