Ho un'attività con ActionBar e navigazione a schede. Sto usando la modalità split, quindi le schede sono in alto e le azioni sono nella barra in basso. Come posso modificare dinamicamente le azioni di fondo? Ho bisogno di questo perché ogni scheda ha diverse azioni.Come posso modificare dinamicamente le azioni della barra di azione?
risposta
Dal momento che le azioni sono popolati da menu delle opzioni della propria attività è possibile utilizzare Activity#invalidateOptionsMenu()
. Questo scaricherà il menu corrente e richiamerà i metodi onCreateOptionsMenu
/onPrepareOptionsMenu
della tua attività per ricostruirlo.
Se si utilizzano schede della barra delle azioni per modificare la configurazione del frammento, esiste un modo migliore. Chiedi a ciascun frammento di gestire la propria porzione del menu. Questi frammenti dovrebbero chiamare setHasOptionsMenu(true)
. Quando vengono aggiunti o rimossi i frammenti con voci di menu opzioni, il sistema invalida automaticamente il menu delle opzioni e chiama i metodi onCreateOptionsMenu
/onPrepareOptionsMenu
di ciascun frammento in aggiunta a quelli dell'attività. In questo modo ogni frammento può gestire i propri oggetti e non è necessario preoccuparsi di eseguire il cambio di menu a mano.
ActionMode.invalidate() ha fatto il trucco. Ha causato il onPrepareActionMode()
da richiamare.
Activity#invalidateOptionsMenu()
fatto non la causa onPrepareActionMode()
da richiamare quando si utilizzano voci di elenco con selezione multipla.
come si ottiene la modalità di azione? Ho solo ActionBar – eugene
ActionMode è il primo parametro in onPrepareActionMode (...): http: // goo.gl/tMyBx –
Non ho mai sentito parlare di onPrepareAction –
Activity.invalidateOptionsMenu() richiede API Level 11. C'è una soluzione più semplice, che è compatibile:
Aggiungere il MenuItem al menu inizialmente, ma impostare la sua visibilità a falso. Set visibilità a vero quando desiderato, utilizzando MenuItem.setVisible()
Grazie. Nel caso in cui aiuti gli altri ... Metti 'MenuItem refreshItem = menu.findItem (R.id.action_refresh); refreshItem.setVisible (false); 'nel tuo' onCreateOptionsMenu' – AlvaroSantisteban
@AlvaroSantisteban o '" android: visible "=" false "' in xml –
Activity.invalidateOptionsMenu()
richiede livello di API 11. Utilizzare la versione della libreria di supporto di esso supportInvalidateOptionsMenu().
AppCompatActivity activity = (AppCompatActivity) getActivity();
activity.supportInvalidateOptionsMenu();
- 1. Come modificare l'altezza della vista della barra delle azioni
- 2. Dimensione barra delle azioni dimensione azione
- 3. XPage extlib layout oneui - Come aggiungere dinamicamente le azioni della barra di posizione
- 4. Modificare il colore dell'icona delle impostazioni della barra delle azioni
- 5. Barra azioni Android
- 6. Posso modificare le regole di convalida richieste per diverse azioni?
- 7. Barra di azione contestuale in Honeycomb
- 8. È possibile modificare l'indicatore della scheda della barra delle azioni a livello di programmazione
- 9. Posso modificare la posizione della voce della barra di navigazione?
- 10. Barra delle azioni divisa solo in modalità azione (CAB)
- 11. Modifica posizione della barra delle azioni Android
- 12. three.js - Come posso modificare dinamicamente l'opacità dell'oggetto?
- 13. Come modificare dinamicamente il titolo della scheda
- 14. Come posso abilitare le schede della barra delle azioni in un frammento?
- 15. Nascondi barra di azione mentre mostra la barra di azione divisa
- 16. abilita/disabilita dinamicamente Nascondi/Mostra icona azione ActionBar Android
- 17. Come modificare dinamicamente l'altezza della banda?
- 18. Barra azioni Sherlock con bottoni
- 19. Android Come modificare il menu della barra delle azioni da Fragment
- 20. Il sottomenu della barra delle azioni non funziona con actionLayout
- 21. Stile della barra delle azioni contestuale?
- 22. elemento di menu della barra delle azioni onclick?
- 23. Come modificare dinamicamente le immagini in SurfaceView?
- 24. Posso visualizzare l'anteprima della barra delle azioni nell'editor di layout grafico?
- 25. Posso modificare dinamicamente il negozio della griglia Ext JS
- 26. Compatibilità barra di azioni
- 27. Stili della barra delle azioni contestuali
- 28. È possibile modificare dinamicamente l'icona della barra di stato (icona di notifica)?
- 29. Modifica dell'icona della barra delle azioni
- 30. Azione di conferma della finestra a schermo intero Android e azioni di cancellazione
Solo una nota: setHasOptionsMenu() dovrebbe essere chiamato in onCreate secondo la [documentazione] (http://developer.android.com/guide/topics/fundamentals/fragments.html#ActionBar). – Dave
Questo non è in realtà un requisito. Può essere chiamato da lì ed è un buon posto per farlo in molte circostanze, ma se il frammento è già stato aggiunto e non è nascosto, il menu delle opzioni dell'attività verrà invalidato e il nuovo stato verrà riflesso. – adamp
Sono d'accordo con te, tuttavia i documenti non lo fanno sembrare così. "Affinché questo metodo possa ricevere chiamate, tuttavia, è necessario chiamare setHasOptionsMenu() durante onCreate() ...". Penso che significhino che tu debba chiamare setHasOptionsMenu(), ma che involontariamente hanno fatto sembrare che durante onCreate() fosse anche un requisito. – Dave