2012-09-05 20 views
18

Título explica todo. Quiero abrir un submenú en la barra de acciones al hacer clic en el botón Menú de hardwareAl abrir el submenú en la barra de acciones en el botón de menú Hardware, haga clic en

Este es el código y funciona bien la primera vez que hago clic en el menú. Todas las otras veces que sólo parpadea (se abre y se cierra el instante que)

private Menu mainMenu; 
public boolean onCreateOptionsMenu(Menu menu) { 

MenuInflater inflater = getMenuInflater(); 
inflater.inflate(R.menu.options, menu); 
mainMenu = menu; 

return true; 
} 

public boolean onKeyDown(int keyCode, KeyEvent event) { 
if(event.getAction() == KeyEvent.ACTION_DOWN){ 
    switch(keyCode) { 
    case KeyEvent.KEYCODE_MENU: 

     mainMenu.performIdentifierAction(R.id.more, 0); 

     return true; 
    } 
} 
return super.onKeyDown(keyCode, event); 
} 

y aquí está options.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 

<item 
    android:id="@+id/settings" 
    android:icon="@drawable/ic_menu_preferences" 
    android:showAsAction="ifRoom|withText" 
    android:title="Settings"/> 

<item 
    android:id="@+id/about" 
    android:icon="@drawable/ic_menu_info_details" 
    android:showAsAction="ifRoom|withText" 
    android:title="About"/> 

<item 
    android:id="@+id/more" 
    android:icon="@drawable/ic_menu_moreoverflow_normal_holo_dark" 
    android:showAsAction="always|withText" 
    android:title="More"> 
    <menu> 
     <item 
    android:id="@+id/changelog" 
    android:icon="@drawable/ic_menu_recent_history" 
    android:showAsAction="ifRoom|withText" 
    android:title="Changelog"/> 
     <item 
    android:id="@+id/update" 
    android:icon="@drawable/ic_menu_refresh" 
    android:showAsAction="ifRoom|withText" 
    android:title="Update Check"/> 
<item 
    android:id="@+id/check" 
    android:icon="@drawable/ic_menu_help" 
    android:showAsAction="ifRoom|withText" 
    android:title="Compatibility Check"/> 
     </menu> 
     </item> 

</menu> 

ACTUALIZACIÓN: Método (Solución) acaba de cambiar onKeyDown() para onKeyUp() y ahora se pega

+0

gracias tu edición ayudó :) – Prateek

+0

¡Muchas gracias por tu pregunta! ¡He estado buscando una solución! –

+0

Gracias por la actualización de la solución – antongorodezkiy

Respuesta

6

Prueba esto:

public boolean onCreateOptionsMenu(Menu menu) 
{ 
    super.onCreateOptionsMenu(menu);// <--- add this 

    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.options, menu); 
    mainMenu = menu; 
    return true; 
} 

//override this method instead of onKeyDown().... 
@Override 
public boolean onOptionsItemSelected(MenuItem item) 
{ 
    super.onOptionsItemSelected(item);  

    int menuId = item.getItemId();  
    if(menuId == R.id.settings) 
    { 
     //do settings 
    } 
    //else if(menuId = ...) {....} 

    return true; 
} 
+0

¿Y cómo se llamará cuando haga clic en el menú? – pedja

+0

Ya tengo onOptionsItemSelected para cada elemento, pero lo que quiero hacer es cuando hago clic en la tecla de menú de hardware para abrir el submenú – pedja

+0

. Es lo que 'onOptionsItemSelected (elemento MenuItem)' hace para todos los elementos del menú. Dentro de este método, puede verificar qué elemento del menú se selecciona en base a 'menuId' (use if..else .. o cambie ... caso ...) –

Cuestiones relacionadas