La commutation entre les Android Navigation Tiroir image et curseur lors de l'utilisation de fragments

Lors de l'utilisation de la Navigation Tiroir Android devs sont recommandant que, dans l'ActionBar "seuls les écrans qui sont représentés dans le Tiroir de Navigation devrait avoir le Tiroir de Navigation de l'image" et que "tous les autres écrans ont le traditionnel jusqu'à carat."

Voir ici pour les détails: http://youtu.be/F5COhlbpIbY

Je suis en utilisant une activité de contrôle de multiples niveaux de fragments et peut obtenir le Tiroir de Navigation de l'image à l'écran et la fonction à tous les niveaux.

Lors de la création de niveau inférieur fragments, je peux appeler le ActionBarDrawerToggle setDrawerIndicatorEnabled(false) pour masquer la Navigation image du Tiroir et ont la caret affiche

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 vais avoir, c'est quand je retourner au niveau supérieur des fragments de la Place carats montre encore la place de la Navigation d'origine image du Tiroir. Toutes les suggestions sur la façon de "rafraîchir" la ActionBar sur le haut niveau des fragments de ré-afficher la Navigation image du Tiroir?


Solution

Tom suggestion a fonctionné pour moi. Voici ce que j'ai fait:

MainActivity

Cette activité de contrôle tous les fragments dans l'application.

Lors de la préparation de nouveaux fragments de remplacer d'autres, j'ai mis le DrawerToggle setDrawerIndicatorEnabled(false) comme ceci:

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();

Prochaine, en remplacement de onBackPressed, j'ai repris les ci-dessus par le réglage de la DrawerToggle à setDrawerIndicatorEnabled(true) comme ceci:

@Override
public void onBackPressed() {
    super.onBackPressed();
    //turn on the Navigation Drawer image; 
    //this is called in the LowerLevelFragments
    setDrawerIndicatorEnabled(true)
}

Dans le LowerLevelFragments

Dans les fragments que j'ai modifié onCreate et onOptionsItemSelected comme ceci:

Dans onCreate ajouté setHasOptionsMenu(true) pour permettre la configuration du menu options. Également définir setDisplayHomeAsUpEnabled(true) pour activer la < dans l'actionbar:

@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);
}

Puis dans onOptionsItemSelected chaque fois que le < est pressé il appelle la onBackPressed() de l'activité pour remonter d'un niveau dans la hiérarchie et l'affichage de la Navigation à l'Image du Tiroir:

@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;
         
    }
  • Aussi dans votre onBackPressed() la méthode, vous pouvez vérifier le nombre d'entrées dans la pile de retour avec getFragmentManager().getBackStackEntryCount() la méthode et permettre tiroir indicateur uniquement si le résultat est 0. Dans ce cas, il est inutile d'activer homeAsUpIndicator dans chaque LowerLevelFragments.
  • C'est très utile! Vous devez déplacer la "solution" partie de votre post et d'en faire une véritable "réponse". Vous obtiendrez plus de points pour les upvotes et il est une réponse après tout
  • Pourquoi êtes-vous remplacer le fragment ici: .replace(R.id.frag_layout. Si c'est un autre niveau de la hiérarchie je m'attends à ce que vous .add à la backstack.
  • Vous aime pour cette question <3
  • Bro, comment faites-vous référence à la theDrawerToggle.setDrawerIndicatorEnabled(false); à l'intérieur du fragment? Je pense qu'il est déclaré dans l'Activité Principale de fichier de classe. Je ne peux pas trouver un moyen de faire référence à ce. Tous les conseils?
  • Lors de l'utilisation d'une barre d'outils j'ai dû changer les options d'affichage de ne pas utiliser la maison comme dans le même temps. Sinon, le setDisplayOptions() méthode au sein de la ToolbarWidgetWrapper (de l'intérieur de l'android.de soutien.v7.interne.widget de paquet) ne serait pas recréer l'icône lors de la saisie de la même fragment un deuxième temps. En laissant ce ici pour, lorsque les autres de tomber sur ce problème.
  • Rittmeyer, pourriez-vous expliquer en détail ce que vous avez fait pour résoudre le problème lors de l'utilisation de la barre d'outils?

InformationsquelleAutor EvilAsh | 2013-06-23