2017-05-05 1 views
-1

Je travaille sur android en utilisant Xamarin et MVVMCross framework. Je veux mettre à jour le retrait du fragment du gestionnaire de fragment pour manipuler le bouton de retour, parce que je dois naviguer entre l'écran qui font une référence croisée dans la pile arrière. Donc, je veux supprimer les entrées répétitives de la pile. Il supprime les entrées répétitives de la pile mais ne met pas à jour le BackStackEntryCount avec les derniers fragments.Supprimer des fragments répétitifs du gestionnaire de fragments dans Xamarin Android

J'ai code écrit

public override void OnFragmentChanged(IMvxCachedFragmentInfo fragmentInfo) 
    { 
     if (fragmentInfo != null) 
     { 
      var ifExists = 
       SupportFragmentManager.Fragments?.FirstOrDefault(x => x.Tag.ToLower() == fragmentInfo.Tag.ToLower()); 

      if (ifExists != null) 
      { 
       var indexOf = SupportFragmentManager.Fragments.IndexOf(ifExists); 
       var total = SupportFragmentManager.BackStackEntryCount; 
       for (int i = indexOf + 1; i < total; i++) 
       { 
        SupportFragmentManager.Fragments.RemoveAt(i); 
       } 
      } 
     } 

     base.OnFragmentChanged(fragmentInfo); 
    } 

Répondre

0

SupportFragmentManager.Fragments est une propriété en lecture seule (Il a seulement get). La modification du contenu de la liste de fragments n'a aucun impact sur le comptage du backstack du fragment de soulignement. Ce que vous pouvez essayer à la place, c'est de faire tomber la pile dans le fragment existant. Cela devrait supprimer tous les fragments au-dessus.

var exisitngFragment = SupportFragmentManager.FindFragmentByTag(fragmentInfo.Tag); 
SupportFragmentManager.PopBackStackImmediate(exisitngFragment.Id, 0);