2012-10-14 16 views
9

sto ignorando onPrepareOptionsMenu per nascondere e mostrare le voci di menu. Durante il test con l'emulatore di livello 16 API; onPrepareOptionsMenu non viene chiamato quando si apre il menu per la prima volta. Ma quando riapro il menu funziona. Il problema è solo con il primo utilizzo. Puoi semplicemente testarlo con questo;Jelly Bean non chiamare onPrepareOptionsMenu() quando si apre il menu per la prima volta

@Override 
public void onPrepareOptionsMenu(Menu menu) { 
    Toast.makeText(this.getActivity(), "pre", Toast.LENGTH_SHORT).show(); 
    super.onPrepareOptionsMenu(menu); 
} 

Tutte le idee?

risposta

17

onPrepareOptionsMenu() è chiamato ogni volta che l'utente apre il menu su Gingerbread e al di sotto. Dal nido d'ape il menu Opzioni si presume essere sempre aperto quando gli elementi sono presenti nel ActionBar.

Se si desidera aggiornare il menu Opzioni durante la vostra attività ai cicli di vita e nel onPrepareOptionsMenu() callback è necessario chiamare invalidateOptionsMenu() e la onPrepareOptionsMenu() sarà chiamato.

Potrebbe non implementare il codice per il primo utilizzo nel onCreateOptionsMenu() richiamata? Viene chiamato ogni volta che viene creato il Menu Opzioni e viene creato al primo utilizzo.

+0

invalidateOptionsMenu ha funzionato. grazie – syloc

+0

Da dove chiami? – Skynet

+0

Dalla tua attività. – IKavanagh

5

Si tratta di bug Android: https://code.google.com/p/android/issues/detail?id=24231

La prima volta che premere il pulsante menu di tempo, chiama invalidateOptionsMenu() o supportInvalidateOptionsMenu() se si utilizza libreria di supporto.

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    switch(keyCode) { 
    case KeyEvent.KEYCODE_MENU: 
     if(mIsMenuFirstClick) { 
      mIsMenuFirstClick = false; 
      supportInvalidateOptionsMenu(); 
     } 
    } 
    return super.onKeyDown(keyCode, event); 
} 
+2

Funziona magnificamente, grazie! Si noti che in alcuni casi dovrebbe essere 'ActivityCompat.invalidateOptionsMenu (this);'. – zelanix

Problemi correlati