2011-07-13 12 views
22

Tengo un menú creado por:Android: onCreateOptionsMenu() Punto de Acción

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
    menu.add("Email"); 

    return super.onCreateOptionsMenu(menu); 
    } 

Pero no puedo recordar cómo establecer un OnClickListener así que cuando su seleccionado puedo correr mi función de correo electrónico.

Respuesta

36

Anular onOptionsItemSelected(MenuItem item). Por lo que sería como

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case 0: 
      // do whatever 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

EDIT:

Dado que esto ha conseguido tantos puntos, debo señalar que es muy bueno para agregar identificaciones a las opciones del menú. Una buena forma de asegurarse de que siempre sean únicos es definirlos en un recurso ids.xml que se coloca en la carpeta res/values.

ids.xml

<resources> 
    <item name="menu_action1" type="id"/> 
    <item name="menu_action2" type="id"/> 
    <item name="menu_action3" type="id"/> 
</resources> 

Luego, cuando se reemplaza el método onCreateOptionsMenu(Menu menu), puede utilizar los identificadores de este modo:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    super.onCreateOptionsMenu(menu); 

    menu.add(Menu.NONE, R.id.menu_action1, Menu.NONE, R.string.menu_action1); 
    menu.add(Menu.NONE, R.id.menu_action2, Menu.NONE, R.string.menu_action1); 

    return true; 
} 

Anulación onOptionsItemSelected(MenuItem item).

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.menu_action1: 
      // do whatever 
      return true; 
     case R.id.menu_action2: 
      // do whatever 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

La razón de hacer esto es la Activity anularía esto con las opciones de menú, pero Fragments también pueden añadir sus propios elementos de menú. El uso del ids.xml garantiza que los ID sean únicos, independientemente del orden en que se coloquen.

+5

Como una buena práctica de programación, usaría identificadores en lugar de codificar los números en el estuche. –

8

De Android developer guide

@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); 
} 
} 
6
public boolean onOptionsItemSelected(MenuItem item) { 
     switch(item.getItemId()) { 
     case R.id.itemid: 
      //do cool stuff 
      break; 
      } 
    } 
+0

lol ... hombre soy lento. – JLB

+0

voto por el icono de Alabama @JLB = P – Dave

18

Eso no funcionará. Debe definir ID para sus elementos de menú:

public static final int MENU_ADD = Menu.FIRST; 
public static final int MENU_DELETE = Menu.FIRST + 1; 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    super.onCreateOptionsMenu(menu); 

    menu.add(Menu.NONE, MENU_ADD, Menu.NONE, "Add"); 
    menu.add(Menu.NONE, MENU_DELETE, Menu.NONE, "Delete"); 
    return true; 
} 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) 
    { 
     switch(item.getItemId()) 
     { 
      case MENU_ADD: 

      return true; 
     case MENU_DELETE: 

      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
     } 
    } 
Cuestiones relacionadas