web-dev-qa-db-fra.com

Android: comment recréer la barre d'actions lorsque le fragment est modifié

J'ai une activité montrant quelques fragments. La vue d'activité contient uniquement ViewPager initialisé avec FragmentPagerAdapter personnalisé. Cet adaptateur permet de naviguer entre 3 fragments.

Tout semble bien fonctionner sauf la barre d'action.

Je remplace la méthode onCreateOptionsMenu () dans mes fragments pour créer une barre d'action individuelle pour n'importe quel fragment:

 @Override 
 Public vide onCreateOptionsMenu (menu Menu, MenuInflater inflater) 
 {
 Super.onCreateOptionsMenu (menu, inflater); 
 Menu.clear (); 
 
         //fragment specific menu creation
    }

Lorsque je glisse, un nouveau fragment apparaît, mais la barre d'action reste la même pendant quelques secondes. Probablement après quelques secondes, cette méthode est appelée et la barre d'action est modifiée.

Cela semble assez mauvais lorsque la barre d'action est modifiée dans un certain temps après la fin du balayage. Comment puis-je recréer la barre d'action immédiatement avant le début du balayage?

24
mc.dev

Vous pouvez demander à Android de recréer la barre d'actions avant qu'elle ne le fasse automatiquement en appelant invalidateOptionsMenu();

Faites cela quelque part près du point où vous modifiez les fragments pour essayer de réduire le décalage entre le changement de fragment et la barre d'actions.

Modifier

une solution complète peut ressembler à ceci:

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
}

}

selon le fragment ouvert pendant la

activity.invalidateOptionsMenu();

appellera alors son

 onCreateOptionsMenu

et vous pouvez y créer des menus de fragments spécifiques

26
roarster

Cela peut être fait en implémentant onCreateOptionsMenu et en appelant setHasOptionsMenu (true) dans le rappel onAttach dans chaque fragment et modifiez les actions en conséquence.

Pour afficher le fragment sans aucune action setHasOptionsMenu (false)

4
Kumait

Si vous utilisez des onglets ActionBar, vous souhaitez voir cette réponse:

Comment puis-je changer dynamiquement les actions de la barre d'actions?

2
David

Finalement, je n'ai trouvé aucun moyen sûr d'y parvenir.

Le mieux serait de faire de la barre d'actions une partie du fragment, pas de l'activité, mais c'est impossible.

Je finis par effacer le menu et le titre de la barre d'action lorsque le balayage commence (vous pouvez définir un écouteur spécial dans PageView) et définir à nouveau le menu et le titre lorsque le balayage est terminé et qu'un nouveau fragment est affiché.

In donne un certain décalage et la barre d'action semble étrangement vide pendant le balayage, mais c'est mieux que vous puissiez faire.
L'API Android est c ...

1
mc.dev