2016-09-03 2 views
0

Ich habe einen Haufen seltsamer Probleme mit Fragmenten, die zur Entwurfszeit eingebettete Fragmente in der axml enthalten.Xamarin eingebettetes Fragment in Fragment

Meine Frage ist, wenn ich mit dem Fragment fertig bin, das ich in eine Ansicht mit dem FragmentManager geladen habe, und dann auch mit dem FragmentManager entfernt, werden die implizit geladenen Fragmente automatisch zerstört? Wenn nicht, wie sollte ich das Elternfragment aufräumen, damit die eingebetteten Fragmente auch zerstört werden. Wenn das übergeordnete Fragment zerstört wird, muss ich View.RemoveAllViews() aufrufen, um das Fragmentlayout zu entfernen?

Antwort

0

Dies scheint zu funktionieren. Erfassen Sie die Fragmente, wenn sie in eine Liste geladen werden, und entfernen Sie sie dann, wenn das Hauptfragment später entladen wird. (Muss entsorgen())

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

Nicht vollständig behoben. Jetzt habe ich die Umkehrung des Problems. Wenn ich ein Fragment erstelle, dann zerstöre es und versuche dann, es neu zu erstellen. Ich bekomme jetzt das eingebettete Fragment, das wirft und die Ausnahme sagt, dass es nicht auf ein entsorgtes Objekt zugreifen kann. – Terry151151

0

Ich entdeckte, dass das, was ich versuche, nicht erlaubt ist.

From this article

beachten, dass eine Einschränkung ist, dass verschachtelte (oder Kind) Fragmente dynamisch zur Laufzeit zu ihrem Elternfragment hinzugefügt werden müssen, und können nicht statisch hinzugefügt, um den Tag verwendet.

Verwandte Themen