studio programacion herramientas fundamentos con avanzado aplicaciones android menu options-menu

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; } }