2012-01-27 11 views
35

Quindi, questo è quello che voglio sapere. Come posso impostare la visibilità del menu in modo programmatico su Android ?? Questo è come io ho il mio menu:Imposta la visibilità nel Menu a livello di programmazione 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; 
} 

Ma questo codice non è sul onCreate, quindi Non lo so come impostare un elemento visibile o invisibile di programmazione (nel mio caso, voglio che il "menuregistrar" . essere invisibile una volta che ho registrato la mia domanda e per sempre

risposta

106

mettere questo metodo nella Activity

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

nella versione più breve si potrebbe scrivere:

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 per risposta bello ... – Lucifer

+2

Due consigli: 1.you può stringere che fino scrivendo 'registrarsi. setVisible (userNotRegistered); '2. Le variabili booleane sono generalmente positive cioè' if (! userRegistered) '. 'if (! UsersNotRegistered)' è difficile da capire: se l'utente non è registrato NO? –

+1

@ W.K.S concordato. grazie per il commento. –

2

Utilizzare public boolean onPrepareOptionsMenu (Menu menu) viene chiamato ogni volta che si preme il pulsante del menu e si fanno le cose lì. oppure usa il tuo oncreateoptionsmenu() in diverse attività per gonfiare diversi menu - questo viene chiamato una sola volta.

Acclamazioni

+1

onPrepareOptionsMenu viene anche chiamato ogni volta che si chiama invalidateOptionsMenu, quindi può essere chiamato più di una volta. – javahead76

+0

@ javahead76 questa chiamata funzionerà solo se 'Build.VERSION.SDK_INT> = 11' –

6

vorrei semplificare la soluzione di Adil ancora di più con il seguente:

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

È buono, ma alcuni nuovi utenti non lo otterrebbero, poiché hanno fretta e vogliono risolvere il problema al più presto, quindi ho speso per mostrare cosa sta realmente accadendo lì. :) –

+1

@AdilSoomro, questo codice è più semplice (e più conveniente se "sono di fretta") rispetto alla risposta, quindi suggerirei di modificare la risposta originale. – Stan

Problemi correlati