2016-11-28 12 views
0

Я новичок в разработке Android. Я создал новый проект с шаблоном проекта по умолчанию для андроид-студии, Activity Drawer Activity.Android onCreateOptionsMenu findItem получить null

Я добавил отладки сообщение следующим образом:

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

Вставить ваш menu.xml здесь – Rudresh

ответ

0

К сожалению об ответе выше, я не читаю ваш вопрос точно. Вы можете найти NavigationView в onCreate() и установить значок, используя свою библиотеку

@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'. 'activity_main_drawer.xml' в' NavigationView', вы должны найти '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

Спасибо. Но я хочу использовать iconify для установки значка в меню. – bns

+0

@bns вы можете продумать выше комментарий, потому что, согласно мне, вы должны получить обоснованный ответ на основе вашего вопроса. –

+0

Я хочу использовать iconify, https://github.com/JoanZapata/android-iconify, чтобы установить значок в пункте меню. Чтобы достичь этого, он сказал, что он использует следующий код: menu.findItem (R.id.share) .setIcon ( новый IconDrawable (это, FontAwesomeIcons.fa_share) .colorRes (R.color.ab_icon) .actionBarSize()); которые вводят меня вышеуказанная проблема – bns