2012-01-27 20 views
35

Entonces, eso es lo que quiero saber. ¿Cómo puedo establecer la visibilidad del menú programáticamente en Android? Esta es la forma en que tengo mi menú:Establecer visibilidad en el menú programáticamente android

public boolean onCreateOptionsMenu(Menu menu){ 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu, menu); 
    return true; 
} 

public boolean onOptionsItemSelected (MenuItem item){ 
    switch (item.getItemId()){ 
     case R.id.menuregistrar: 
      break; 
     case R.id.menusalir: 
      break; 
    } 
    return true; 
} 

Pero este código no está en el onCreate, así que no sé cómo configurar un elemento visible o invisible mediante programación (en mi caso, quiero que el "menuregistrar" . para ser invisible una vez que me he registrado mi solicitud y para siempre

Respuesta

106

poner este método en su Activity

public boolean onPrepareOptionsMenu(Menu menu) 
{ 
    MenuItem register = menu.findItem(R.id.menuregistrar);  
    if(userRegistered) 
    {   
     register.setVisible(false); 
    } 
    else 
    { 
     register.setVisible(true); 
    } 
    return true; 
} 

en la versión más corta podría escribir:

MenuItem register = menu.findItem(R.id.menuregistrar);  
register.setVisible(!userRegistered); //userRegistered is boolean, pointing if the user has registered or not. 
return true; 
+0

1 de respuesta agradable ... – Lucifer

+2

Dos consejos: 1.you puede apretar hasta que escribiendo 'registrar. setVisible (userNotRegistered); '2. Las variables booleanas suelen ser positivas, es decir,' if (! userRegistered) '. 'if (! UsersNotRegistered)' es difícil de entender: si el usuario NO está registrado? –

+1

@ W.K.S estuvo de acuerdo. gracias por el comentario. –

2

Use public boolean onPrepareOptionsMenu (Menu menu) se llama cada vez que presiona el botón de menú y hace sus cosas allí. o use su oncreateoptionsmenu() en diferentes actividades para inflar diferentes menús: este solo se llama una vez.

Saludos

+1

onPrepareOptionsMenu también se invoca cada vez que se llama a invalidateOptionsMenu, por lo que se puede llamar más de una vez. – javahead76

+0

@ javahead76 Esta llamada solo funcionará si 'Build.VERSION.SDK_INT> = 11' –

6

Me simplificar la solución de Adil aún más con lo siguiente:

public boolean onPrepareOptionsMenu(Menu menu) 
{ 
    MenuItem registrar = menu.findItem(R.id.menuregistrar);  
    registrar.setVisible(!isRegistered); 
    return true; 
} 
+1

Es bueno, pero algunos usuarios nuevos no lo obtendrán, ya que están apurados y quieren resolver el problema lo antes posible, así que gasté para mostrar lo que realmente está sucediendo allí. :) –

+1

@AdilSoomro, este código es más simple (y más conveniente si "tienen prisa") que en su respuesta, por lo que le sugiero que edite la respuesta original. – Stan

Cuestiones relacionadas