programacion - manual de android en pdf
Android: acción del elemento onCreateOptionsMenu() (4)
Tengo un menú creado a través de:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add("Email");
return super.onCreateOptionsMenu(menu);
}
Pero no recuerdo cómo configurar un onclicklistener para que cuando esté seleccionado pueda ejecutar mi función de correo electrónico.
De la guía del desarrollador de Android
@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);
}
}
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);
}
}
Reemplazar onOptionsItemSelected(MenuItem item)
. Así sería como
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 0:
// do whatever
return true;
default:
return super.onOptionsItemSelected(item);
}
}
EDITAR:
Dado que esto ha conseguido tantos puntos, debo señalar que es muy bueno agregar ID a las opciones del menú. Una buena manera 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 reemplaza el onCreateOptionsMenu(Menu menu)
, puede usar las ID de esta forma:
@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;
}
Reemplazar 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 por la que haces esto es que la Activity
anularía esto con las opciones de menú, pero los Fragments
también pueden agregar sus propios elementos de menú. El uso de ids.xml
garantiza que las ID sean únicas sin importar el orden en que se colocan.
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.itemid:
//do cool stuff
break;
}
}