Cómo llamar a Actividad desde un elemento de menú en Android?

Estoy tratando de llamar startActivity (myIntent) desde el clic de un botón de menú, pero mi aplicación se bloquea en ese momento.

La misma llamada de startActivity funciona bien desde un clic de botón normal, así que, supongo que el botón de menú falta información sobre el contexto? O tal vez estoy totalmente fuera de la marca aquí.

Así que … ¿cuál es la forma correcta de tener un elemento de menú que me lleve a una actividad específica?

He revisado mi código basado en el conjunto inicial de consejos. Sigue chocando en el mismo lugar. El depurador no introduce la cláusula de excepción, la aplicación acaba de morir.

[EDITADO CON CÓDIGO SNIPPET]

public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle item selection try{ switch (item.getItemId()) { case R.id.menuItemLang: startActivity(new Intent("com.my.project.SETTINGS")); return true; default: return super.onOptionsItemSelected(item); } }catch(Exception e){ log(e); } } 

Primera opción

onOptionsItemSelected anular el método onOptionsItemSelected en su Actividad, que se llama cuando el usuario hace clic en el elemento en el menú Opciones. En el método puede comprobar qué elemento se ha hecho clic.

 @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case R.id.menu_item1: Intent intent = new Intent(this, ActivityForItemOne.class); this.startActivity(intent); break; case R.id.menu_item2: // another startActivity, this is for item with id "menu_item2" break; default: return super.onOptionsItemSelected(item); } return true; } 

También hay onContextItemSelected método que funciona de manera similar, pero para el menú de contexto (no estoy seguro, qué menú que quiere decir).

Más información en http://developer.android.com/guide/topics/ui/menus.html

EDITAR:

Segunda opción

Creo que la primera opción es más fácil, pero desde el código que veo, que desea iniciar la actividad como una acción (debido a String parámetro en el constructor de Intent ). Para ello, debe especificar una acción en su AndroidManifest.xml. Por lo tanto, si empezaría la actividad ActivityForItemOne (desde el ejemplo anterior) el elemento <application> en AndroidManifest.xml se vería así:

 <application ...> ... <activity android:label="Activity For First Item" android:name=".ActivityForItemOne"> <intent-filter> <action android:name="my.app.ITEMONE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> </application> 

Y la Intent será:

 Intent intent = new Intent("my.app.ITEMONE"); 

El my.app. es el paquete de su aplicación. No es necesario utilizar el paquete de aplicación, pero se recomienda para la unicidad de las acciones.

Mas información en:

Acción de clase – Acción y constantes de categoría

Elemento de acción

Intents y filtros de intención

Espero que esto solucione su problema.

Más optimice:

 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.item1: return true; case R.id.item2: return true; default: return super.onOptionsItemSelected(item); } } 

si hay 2 clase 1 MainActivity 2 Bienvenido, entonces usted necesita ir de welcom> MainActivity

@Override public boolean onCreateOptionsMenu (Menú de menú) {

  return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case R.id.logout: Intent intent = new Intent(this, MainActivity.class); this.startActivity(intent); break; case R.id.settings: // another startActivity, this is for item with id "menu_item2" break; default: return super.onOptionsItemSelected(item); } return true; } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.