Lors de l'utilisation du tiroir de navigation, les développeurs d'Android recommandent que dans la barre d'action "seuls les écrans représentés dans le tiroir de navigation aient effectivement l'image du tiroir de navigation" et que "tous les autres écrans aient le traditionnel carat haut".
Voir ici pour plus de détails : http://youtu.be/F5COhlbpIbY
J'utilise une activité pour contrôler plusieurs niveaux de fragments et je peux faire en sorte que l'image du tiroir de navigation s'affiche et fonctionne à tous les niveaux.
Lors de la création de fragments de niveau inférieur, je peux appeler la fonction ActionBarDrawerToggle
setDrawerIndicatorEnabled(false)
pour cacher l'image du tiroir de navigation et afficher le curseur vers le haut
LowerLevelFragment lowFrag = new LowerLevelFragment();
//disable the toggle menu and show up carat
theDrawerToggle.setDrawerIndicatorEnabled(false);
getSupportFragmentManager().beginTransaction().replace(R.id.frag_layout,
lowFrag, "lowerFrag").addToBackStack(null).commit();
Le problème que je rencontre est que, lorsque je retourne aux fragments de niveau supérieur, le carat Up s'affiche toujours à la place de l'image originale du tiroir de navigation. Avez-vous des suggestions sur la façon de "rafraîchir" la barre d'action sur les fragments de niveau supérieur pour réafficher l'image du tiroir de navigation ?
Solution
La suggestion de Tom a fonctionné pour moi. Voici ce que j'ai fait :
Activité principale
Cette activité contrôle tous les fragments de l'application.
Lorsque je prépare de nouveaux fragments pour en remplacer d'autres, je règle le DrawerToggle setDrawerIndicatorEnabled(false)
comme ça :
LowerLevelFragment lowFrag = new LowerLevelFragment();
//disable the toggle menu and show up carat
theDrawerToggle.setDrawerIndicatorEnabled(false);
getSupportFragmentManager().beginTransaction().replace(R.id.frag_layout,
lowFrag).addToBackStack(null).commit();
Ensuite, dans une surcharge de onBackPressed
J'ai inversé l'effet ci-dessus en définissant le DrawerToggle comme suit setDrawerIndicatorEnabled(true)
comme ça :
@Override
public void onBackPressed() {
super.onBackPressed();
// turn on the Navigation Drawer image;
// this is called in the LowerLevelFragments
setDrawerIndicatorEnabled(true)
}
Dans les fragments de niveau inférieur
Dans les fragments que j'ai modifiés onCreate
y onOptionsItemSelected
comme ça :
Sur onCreate
ajouté setHasOptionsMenu(true)
pour permettre de configurer le menu des options. Définissez également setDisplayHomeAsUpEnabled(true)
pour activer le < dans la barre d'action :
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// needed to indicate that the fragment would
// like to add items to the Options Menu
setHasOptionsMenu(true);
// update the actionbar to show the up carat/affordance
getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
}
Ensuite, dans onOptionsItemSelected
chaque fois que le < est pressé, il appelle le onBackPressed()
de l'activité pour remonter d'un niveau dans la hiérarchie et afficher l'image du tiroir de navigation :
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Get item selected and deal with it
switch (item.getItemId()) {
case android.R.id.home:
//called when the up affordance/carat in actionbar is pressed
getActivity().onBackPressed();
return true;
…
}