2011-08-19 6 views
4

(newbe)onOptionsItemSelected retour ID incorrect

Lorsque je clique sur un menu de la méthode ci-dessus renvoie un ID dans le premier menu, pas celui que je clique dessus. Si je vérifie pour le titre condensé du menu c'est correct.

int id = item.getItemId(); //returns id of an incorrect menu 
String Title = (String) item.getTitleCondensed(); //this returns the correct title. 

Toutes idées sont les bienvenues.

+0

Que voulez-vous dire par * Le premier menu *? Est-ce un sous-menu? – Phil

Répondre

1

Vous devez avoir défini un ID unique pour chaque élément de menu dans onCreateOptionsMenu et onCreateContextMenu.

Par exemple:

public static final int CONTEXT_MENU_DELETE = Menu.FIRST; 
    public static final int CONTEXT_MENU_EDIT = CONTEXT_MENU_DELETE + 1; 

    @Override 
    public void onCreateContextMenu(ContextMenu menu, View v, 
        ContextMenuInfo menuInfo) { 

      menu.add(0, CONTEXT_MENU_DELETE, 1, R.string.delete); 
      menu.add(0, CONTEXT_MENU_EDIT, 2, R.string.edit); 
    } 

    // And then 

    @Override 
    public boolean onContextItemSelected(MenuItem item) { 

      switch(item.getItemId()) { 

      case CONTEXT_MENU_DELETE: 
        // Delete item 
        break; 

      case CONTEXT_MENU_EDIT: 
        // Edit item 
        break; 
      } 
    } 

La même chose est pour onCreateOptionsMenu et onOptionsItemSelected. Vous devriez avoir une constante unique pour chaque option de menu.

Ajouté:

Est-ce pas consulter this tutorial? L'idée est la même. Vous devez définir différents ids dans menu.xml:

<?xml version="1.0" encoding="utf-8"?> 
    <menu xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item android:id="@+id/new_game" 
       android:icon="@drawable/ic_new_game" 
       android:title="@string/new_game" /> 
     <item android:id="@+id/help" 
       android:icon="@drawable/ic_help" 
       android:title="@string/help" /> 
    </menu> 

Et puis utilisez ces ids dans onOptionsItemSelected:

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle item selection 
     switch (item.getItemId()) { 
     case R.id.new_game: 
      newGame(); 
      return true; 
     case R.id.help: 
      showHelp(); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
     } 
    } 

Découvrez ces blocs de code de tutoriel Menu Android officiel et comparer à votre propre code. Vous pouvez également publier votre menu.xml, onCreateOptionsMenu et onOptionsItemSelected afin qu'il soit facile de comprendre votre problème.

+0

Salut, Merci pour la réponse. J'aurais dû mentionner que mon menu provient d'un fichier menu.xml, donc je n'attribue pas les ID, ils sont générés par le système, par exemple 3124655 ou similaire. Et c'est l'identifiant du système retourné qui est incorrect. – Olan

+0

J'ai ajouté des ressources à la réponse. Vous pouvez également publier vos 'menu.xml',' onCreateOptionsMenu' et 'onOptionsItemSelected' afin qu'il soit facile de comprendre votre problème. – Victor

+0

Salut, Le tutoriel est exactement là où j'ai commencé. Mon menu ressemble à ceci: – Olan

7

J'ai eu le même problème. Les fichiers générés à partir de la version ne sont pas correctement mis à jour.

J'ai eu le même effet si j'ai réordonné les éléments de menu dans le xml ... build et la surprise. En cliquant sur le menu apporte d'autres codes que prévu. Faites un nettoyage et réessayez

+1

Cela m'est juste arrivé - le nettoyage m'a aidé ... Étrange - mais merci ;-) – Thomas

+0

J'ai nettoyé le projet et cela a fonctionné. Merci. –

Questions connexes