0

Je modifie le retrait d'un élément de menu spécifique lorsque certaines actions sont effectuées dans mon application.Options Menu null à l'exécution

Tout fonctionne normalement, sauf lorsque j'essaie de le faire dans la méthode onCreate de mon activité.

J'utilise la méthode suivante:

menu.findItem(R.id.favorite).setIcon(R.drawable.ic_action_icons8_star_filled_100); 

Dans un événement onClick et il fonctionne parfaitement.

Mais quand j'utilise la même méthode dans mon onCreate, il me donne la eror suivante:

java.lang.NullPointerException: Attempt to invoke interface method 'android.view.MenuItem android.view.Menu.findItem(int)' on a null object reference 

C'est le code que je utilise pour gonfler les menu

private Menu menu; 

-------------------- 


@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.image_details, menu); 

     this.menu = menu; 

     return super.onCreateOptionsMenu(menu); 
    } 

Toutes les idées? Merci.

Répondre

1

Vous pouvez utiliser onPrepareOptionsMenu (un appel sera reçu chaque fois que le menu sera visible). Vous obtenez null pointeur car onCreateOptionsMenu appellera après onCreate afin que votre objet de menu sera null.

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 

    MenuItem favoriteItem = menu.findItem(R.id.favorite); 

favoriteItem.setIcon(getResources().getDrawable(R.drawable.drawable.ic_action_icons8_star_filled_100)); 

    return super.onPrepareOptionsMenu(menu); 
} 
1

Selon le Activity lifecycle, onCreateOptionsMenu est appelée après onResume, alors quand onCreate est appelé, le champ menu n'a pas encore été fixée. Si vous déplacez l'appel vers onPrepareOptionsMenu cela devrait fonctionner.