2013-01-23 11 views
23

Ho un'attività che mostra alcuni frammenti. La vista Attività contiene solo ViewPager inizializzato con FragmentPagerAdapter personalizzato. Questo adattatore fornisce la navigazione tra 3 frammenti.Android: Come ricreare la barra delle azioni quando il frammento è stato modificato

Tutto sembra funzionare bene tranne la barra delle azioni.

sovrascrivo metodo onCreateOptionsMenu() nei miei frammenti di creare barra di azione individuale per qualsiasi frammento:

 
    @Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
    { 
     super.onCreateOptionsMenu(menu, inflater); 
     menu.clear();

//fragment specific menu creation }

Quando faccio colpo, appare nuovo frammento, ma barra di azione rimanere lo stesso per alcuni secondi. Probabilmente dopo pochi secondi viene chiamato questo metodo e la barra delle azioni viene cambiata.

Sembra molto brutto quando la barra di azione viene modificata in un attimo dopo il passaggio del dito. Come posso ricreare immediatamente la barra delle azioni, prima dello scorrimento?

risposta

26

Si può chiedere Android per ricreare l'ActionBar prima che lo fa automaticamente chiamando invalidateOptionsMenu();

Fate questo da qualche parte vicino al punto in cui si cambia frammenti per cercare di diminuire il 'ritardo' tra il frammento e ActionBar cambiando .

Modifica

una soluzione completa può apparire come segue:

class activity extends Activity{ 

private void switchFragment(){ 

...do fragment changing stuff 

activity.invalidateOptionsMenu(); 

} 

} 

class someFragment extends Fragment{ 

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
{ 
    super.onCreateOptionsMenu(menu, inflater); 
    menu.clear(); 


    //fragment specific menu creation 
} 

} 

qualsiasi frammento è aperto durante il

activity.invalidateOptionsMenu(); 

sarà poi chiamare il suo

onCreateOptionsMenu 

e si può creare la creazione del menu specifico del frammento in questo punto

+0

Il problema è che non ho potuto trova un modo ovvio per chiedere a Android di ricreare la barra delle azioni. –

+0

@Mik ho aggiornato la mia risposta per aiutare ma non ti capisco completamente ... invalidateOptionsMenu() dovrebbe "chiedere a Android di ricreare la barra delle azioni" – roarster

+5

Grazie, per la risposta, ma 1. Quando si chiama .invalidateOptionsMenu(); il sistema non ricrea davvero la barra delle azioni. Causa solo suCreateOptionsMenu() nel tuo frammento che ti permette di cambiare Menu (che è parte della barra di azione). Se hai chiamato setHasOptionsMenu (true) nel tuo frammento, non devi nemmeno chiamare invalidateOptionsMenu(), perché onCreateOptionsMenu() viene chiamato automaticamente. 2. Non ho trovato un modo per chiamare suCreateOptionsMenu() prima dello scorrimento. –

1

Infine, non sono riuscito a trovare alcun metodo valido per ottenere ciò.

Il meglio sarebbe rendere la barra delle azioni una parte del frammento, non delle attività, ma è impossibile.

Finisco con la cancellazione del menu e del titolo della barra delle azioni quando si avvia lo scorrimento (è possibile impostare listener speciale in PageView) e impostare nuovamente menu e titolo quando si esegue lo scorrimento e vengono visualizzati nuovi frammenti.

In dà un certo ritardo e la barra delle azioni sembra stranamente vuota durante lo scorrimento, ma è meglio che tu possa fare.
API Android è c ...

+0

gesù ... soluzione scadente! l'architettura Android è molto complicata !!! – Mateus

4

può essere fatto mediante l'attuazione di onCreateOptionsMenu e chiamando setHasOptionsMenu (true) nella callback onAttach in ogni frammento e modificare le azioni di conseguenza.

Per mostrare il frammento senza azioni setHasOptionsMenu (false) in esso

+0

Grazie per aver menzionato 'onAttach' e' setHasOptionsMenu'! – Steven

Problemi correlati