2013-04-19 11 views
12

Ho esaminato le domande sullo stack overflow e non riesco a trovare la soluzione.Cercando di nascondere e mostrare le voci di menu sulla barra delle azioni

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.themenu, menu); 
    MenuItem item = menu.findItem(R.id.menu_settings); 
    MenuItem item2 = menu.findItem(R.id.menu_save); 
    item.setVisible(isdown); 
    item2.setVisible(isdown); 
    return true; 
} 

Imposta le voci del menu su visibile (elemento1 e elemento2). l'onclick funziona bene

public void inflateTextarea() { 
    if(isdown == true) { 
     isdown = false; 
     LinearLayout tl = (LinearLayout)findViewById(R.id.content); 
     tl.setVisibility(View.VISIBLE); 
     ScaleAnimation scale = new ScaleAnimation(1, 1, 0, 1); 
     scale.setFillAfter(true); 
     scale.setDuration(500); 
     tl.startAnimation(scale); 
    } 
} 

Quindi questo imposta il mio isdown booleano su falso. in pila la gente dice che il onPrepareOptionsMenu dovrebbe sparare ogni volta che clicco, ma non è questo il caso. Sono in grado di nascondere una voce di menu sulla funzione onclick

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch(item.getItemId()) { 
     case R.id.menu_settings: 
      Log.v("Log:","edit_item pressed"); 
      return true; 
    } 
} 

Ma ho più voci di menu che ho bisogno di nascondere e altri che voglio mostrare. come posso andare su questo?

risposta

19

Non è sufficiente modificare la variabile isDown. Devi chiamare il metodo setVisible() ogni volta che vuoi cambiare la visibilità. Questo metodo fa molto di più che impostare un valore booleano, quindi non basta modificare un valore booleano.

Dopo aver modificato il valore isDown su falso, è necessario chiamare invalidateOptionsMenu() per riavviare il menu chiamando di nuovo onPrepareOptionsMenu().

Prova questo codice per rendere le voci di menu unvisible:

... 
isdown = false; 
invalidateOptionsMenu(); 
... 
+0

sì, lo so, ma mentre leggo il menu onPrepareOptionsMenu (menu menu) {si suppone che venga attivato ogni volta che si fa clic su una voce di menu e CHE funzioni. Non posso impostare la visibilità a meno che non abbia il menu Menu nella funzione, quindi è qui che sto avendo un problema – Dnaso

+0

che vedo. Post modificato per coprire questo. – tbkn23

+0

AHHH questo è quello che stavo cercando. Proverò se funziona male accetta grazie. – Dnaso

11

Prova questa,

private Menu menu=null; 
@Override 
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater) 
{ 
    inflater.inflate(R.menu.note_menu, menu); 
    this.menu=menu; 
super.onCreateOptionsMenu(menu,inflater); 
menu.findItem(R.id.menuChartNoteEdit).setVisible(isdown); 
menu.findItem(R.id.menuChartOpenNote).setVisible(isdown); 
} 

quando si vuole nascondere il menu in ogni dove, dopo l'esecuzione onCreateOptionsMenu() poi basta cambiare il valore per isdown e ripeti questo codice,

menu.findItem(R.id.menu_settings).setVisible(isdown); 
menu.findItem(R.id.menu_save).setVisible(isdown); 
+0

ho sentito che il menu onPrepareOptionsMenu doveva essere migliore, sai qual è la differenza? – Dnaso

+0

ok, quindi ora posso inserire il mio menu.find in qualsiasi funzione della mia classe? – Dnaso

+0

sì, trova l'elemento del menu in qualsiasi punto della tua classe e nascondi/mostra ..!, Lo controlli? –

0

Prova questo nella vostra FragmentActivity

public boolean onPreparePanel(int featureId, View view, Menu menu) { 
    if(isLeftMenuOpened()) return false; 
    return super.onPreparePanel(featureId, view, menu); 
} 

Metodo FragmentActivity.onPreparePanel crea menù per tutti i frammenti collegati. È necessario restituire true per il menu da visualizzare; se restituisci false non verrà mostrato.

0

Ho un menu con due voci, prima: salva oggetto, secondo: modifica articolo. Volevo quando sono entrato per modificare, inizialmente "salva oggetto" era stato nascosto, e quando clicco su "Modifica oggetto", è stato mostrato "Salva oggetto".

Quindi:

  1. dichiarano una voce in pubblico
  2. valore impostato ad essa in onCreateOptionsMenu(Menu menu, MenuInflater inflater)
  3. set visibilità a isHidden()
  4. allora ogni dove volevo, impostare la visibilità per isVisible()

Regione pubblica:

MenuItem saveItem; 

onCreateOptionsMenu:

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.menu_detail_products, menu); 
    saveItem = (MenuItem) menu.findItem(R.id.action_detail_product_save); 
    saveItem.setVisible(isHidden()); 
} 

dove voglio:

saveItem.setVisible(isVisible()); 

Infine funziona come avrei voluto.

Problemi correlati