Ich habe eine App mit Hierarchie wie folgt aus:Android FragmentTab Host und Fragmente innerhalb Fragmente
FragmentTabHost (Main Activity)
- Fragment (tab 1 content - splitter view)
- Fragment (lhs, list)
- Framment (rhs, content view)
- Fragment (tab 2 content)
- Fragment (tab 2 content)
Alle Fragment Ansichten von Ressourcen aufgeblasen werden.
Wenn die app beginnt alles erscheint und sieht gut aus. Wenn ich von der ersten Registerkarte zu einer anderen Registerkarte und wieder zurück wechsele, erhalte ich eine Inflate-Ausnahme, um die Ansichten von Registerkarte 1 neu zu erstellen.
ein wenig tiefer Graben, das ist, was passiert:
- Auf der ersten Last, das Aufblasen der Splitter Ansicht bewirkt, dass sein Kind zwei Fragmente mit dem Fragment-Manager hinzugefügt werden.
- Beim Umschalten von dem ersten Registerkarte, dann ist es Ansicht zerstört wird, aber es ist Kind-Fragmente in dem Fragmente Manager
- Beim Umschalten zurück auf den ersten Registerkarte links sind, wird die Ansicht erneut aufgeblasen und da die alten Fragmente Kind sind nach wie vor eine Ausnahme in dem Fragment-Manager wird ausgelöst, wenn die neue Kind Fragmente instanziiert werden (durch Inflation)
ich habe um das funktioniert durch das Kind Fragment aus dem Fragment-Manager zu entfernen (ich verwende Mono) und ich jetzt kann Tabs ohne die Ausnahme wechseln.
public override void OnDestroyView()
{
var ft = FragmentManager.BeginTransaction();
ft.Remove(FragmentManager.FindFragmentById(Resource.Id.ListFragment));
ft.Remove(FragmentManager.FindFragmentById(Resource.Id.ContentFragment));
ft.Commit();
base.OnDestroyView();
}
Also habe ich ein paar Fragen:
- Ist der über die richtige Art und Weise, dies zu tun?
- Wenn nicht, wie soll ich es tun?
- So oder so, wie zB Zustand Krawatte in all diesem nicht sparend, so dass ich nicht Ansichtszustand verlieren, wenn Tabs zu wechseln?
OK, das klingt vielversprechend. Wie sage ich dem Inflator, den Child Fragment Manager anstelle des übergeordneten zu verwenden? –
Sie fügen das untergeordnete Fragment in das übergeordnete Fragment ein, indem der Code des übergeordneten Fragments den ChildFragmentManager zum Hinzufügen der untergeordneten Fragmente verwendet. Dann stellt der Inflater, den Ihre onCreateView-Callback-Methode Ihres (Kind-) Fragments bereitstellt, zur Verfügung: https://developer.android.com/reference/android/app/Fragment.html#onCreateView (android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle). –
Sie müssen wahrscheinlich etwas mehr googeln/stapeln, um zu sehen, wie Sie mit Kindfragmenten in Mono umgehen. Ich kann dir nicht helfen (ich benutze Java). –