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?
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
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)
Si vous utilisez des onglets ActionBar, vous souhaitez voir cette réponse:
Comment puis-je changer dynamiquement les actions de la barre d'actions?
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 ...