2011-07-22 54 views
9

¿Cómo se cambia el menú de opciones en tiempo de ejecución en Android 2.3.3? Tengo dos menús xml y necesito cambiar el tipo de menú en tiempo de ejecución.Cambio de menú en tiempo de ejecución

Me gustaría destruir o actualizar el menú y cuando el usuario presiona el botón de menú, se vuelve a llamar al menú Crear menú para seleccionar el menú xml apropiado.

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    if(OPTIONS_TYPE == 0) // Photo option 
     getMenuInflater().inflate(R.menu.photomenu, menu); 
    else // Photo + delete option 
     getMenuInflater().inflate(R.menu.photodeletemenu, menu); 

    return super.onCreateOptionsMenu(menu); 
} 
+0

No veo el problema en su código ... Debería funcionar ..., tal vez problema en tu archivo xml? – Jim

+0

Revise sus dos archivos xml, ¿tal vez sean los mismos? Y cree que el código no funciona ... – Jim

+0

Pero onCreateOptionsMenu solo se llama una vez. es decir, cuando el usuario presiona el botón de opciones primero – Arcadia

Respuesta

7

El onCreateOptionsMenu solo recibe una llamada. Puede haber un truco que permite eliminar un menú de opciones, pero la forma estándar para modificarlo después de esa llamada es el siguiente de los documentos androide, tenga en cuenta que dice "debe"

Cambio de elementos de menú en tiempo de ejecución

Una vez que se crea la actividad, se llama al método onCreateOptionsMenu() solo una vez, como se describe anteriormente. El sistema guarda y reutiliza el Menú que defina en este método hasta que se destruya su actividad. Si desea cambiar el menú de Opciones en cualquier momento después de que se creó por primera vez, debe anular el método onPrepareOptionsMenu().

documentación está en Creating Menus

Ahora, habiendo dicho que se puede hacer esto, simplemente no está seguro si está soportada. Este es solo mi propio código de prueba donde cambio los menús cada vez, necesitará agregar su propia lógica

@Override 
public boolean onPrepareOptionsMenu (Menu menu) { 

    menu.clear(); 

    if (OPTIONS_TYPE == 0) { 
     OPTIONS_TYPE = 1; 
     getMenuInflater().inflate(R.menu.secondmenu, menu); 

    } 
    else { // Photo + delete option { 
     OPTIONS_TYPE = 0; 
     getMenuInflater().inflate(R.menu.firstmenu, menu); 
    } 

    return super.onPrepareOptionsMenu(menu); 
} 
+0

Sí, he leído esto ... pero, ¿qué hago en el onPrepareOptionsMenu? – Arcadia

+1

quiero decir que puedo utilizar invalidateOptionsMenu() ya que esto es sólo para Android 3.0 y superior; ( – Arcadia

+0

Este problema se resuelve .. Lo resuelto reemplazando el onPrepareOptionsMenu(), llamando menu.clear() y luego pegar el código en mi onCreateOptionsMenu :) – Arcadia

Cuestiones relacionadas