2016-09-03 2 views
0

Je rencontre un tas de problèmes étranges avec des fragments qui contiennent des fragments incorporés au moment du design dans le axml. Ma question est quand j'ai fini avec le fragment que j'ai chargé dans une vue avec le FragmentManager, et puis enlevé également en utilisant le FragmentManager, les fragments chargés implicitement sont-ils automatiquement détruits? Sinon, comment dois-je nettoyer le fragment parent de sorte que les fragments incorporés sont également détruits. Aussi, lorsque le fragment parent est détruit, dois-je appeler View.RemoveAllViews() pour supprimer la disposition des fragments?Fragment incorporé de Xamarin dans le fragment

Répondre

0

Cela semble fonctionner. Capturez les fragments lorsqu'ils sont chargés dans une liste, puis supprimez-les lorsque le fragment principal est déchargé plus tard. (Must Dispose())

public partial class MainActivity : Activity 
{ 
    private LinearLayout LoaderLayout; 

    private readonly List<Fragment> ActiveFragments = new List<Fragment>(); 

    public override void OnAttachFragment(Fragment fragment) { ActiveFragments.Add(fragment); } 

    private async void ClearLoadFrame() 
    { 
     if(LoaderLayout == null) 
      LoaderLayout = FindViewById<LinearLayout>(Resource.Id.loaderLayout); 

     var Transaction = FragmentManager.BeginTransaction(); 

     foreach(var Frag in ActiveFragments) 
     { 
      Transaction.Remove(Frag); 
      Frag.Dispose(); 
     } 

     Transaction.CommitAllowingStateLoss(); 
     ActiveFragments.Clear(); 

     var Completed = false; 

     RunOnUiThread(() => 
     { 
      LoaderLayout.RemoveAllViews(); 
      Completed = true; 
     }); 

     await Task.Run(() => 
     { 
      while(!Completed) 
       Thread.Sleep(50); 
     }); 
    } 
+1

Pas totalement fixé. Maintenant, j'ai l'inverse du problème. Quand je crée un fragment puis le détruis et essaye ensuite de le recréer, je reçois maintenant le fragment embarqué et l'exception disant qu'il ne peut pas accéder à un objet disposé. – Terry151151

0

J'ai découvert que ce que j'essaie de faire n'est pas autorisé.

From this article

Notez que une limitation est que imbriquées (ou l'enfant) fragments doivent être ajoutés dynamiquement lors de l'exécution à leur fragment parent et ne peut pas être statique ajoutée en utilisant la balise.