2010-08-05 10 views
3

J'essaie de créer un menu Options dans une activité qui démarre à partir d'un service, puis modifie son interface utilisateur en fonction des messages du service transmis via un gestionnaire.Android - Menu Options ne fonctionne pas

Je mis en place dans le menu Options comme suit:


 /** Menu creation and setup **/ 

     /* Creates the menu items */ 
     public boolean onCreateOptionsMenu(Menu menu) { 
      menu.add(0, 1, 0, "Speaker"); 
      menu.add(0, 2, 0, "Mute"); 
      return true; 
     } 

     /* Handles item selections */ 
     public boolean onOptionsItemSelected(MenuItem item) { 
      switch (item.getItemId()) { 
      case 1: 
       //Do something here 
       return true; 
      case 2: 
       //Do something here 
       return true; 
      } 
      return false; 
     } 

Mais il ne sera jamais appelé quand mon application est exécutée du tout.

J'ai rencontré des problèmes lorsque j'ai besoin d'utiliser un Handler pour changer le texte à l'écran lorsque l'information est transmise sur le mauvais thread, est-ce que ce problème pourrait être la cause de l'affichage du menu?

Est-ce alors comment puis-je résoudre ce problème que je ne peux pas remplacer une méthode dans un gestionnaire

+1

Votre activité est créée mais pas le menu? – Sephy

+0

Oui Mon activité s'affiche très bien mais quand j'appuie sur le bouton de menu rien ne se passe –

Répondre

5

Assurez-vous que vous n'êtes pas consommer l'événement clé pour le menu dans un gestionnaire de clé. L'événement du bouton de menu est envoyé via les gestionnaires de clés avant d'être géré par la fonction onCreateOptionsMenu. Cela pourrait se produire dans n'importe quel point de vue, ou par l'activité elle-même. Un moyen rapide de résoudre ce problème serait le suivant:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if(keyCode == KeyEvent.KEYCODE_MENU) 
     return super.onKeyDown(keyCode, event); 
    -- insert all other key handling code here -- 
    return false; 
} 
+0

Cheers! J'ai sorti mes cheveux toute la soirée parce que deux de mes activités ne montraient pas le "menu global", bien qu'ils aient hérité de la même "classe de base de menu globale". Il s'avère que le problème était exactement ce que vous avez indiqué: certaines méthodes onKeyDown créées automatiquement dans mes activités avaient pris le dessus ... MERCI BEAUCOUP! – Spock

2

Essayez d'appeler la méthode super dans votre méthode remplacée onCreateOptionsMenu comme suit:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    boolean result = super.onCreateOptionsMenu(menu); 
    menu.add(0, 1, 0, "Speaker"); 
    menu.add(0, 2, 0, "Mute"); 

    return result; 
} 
Questions connexes