Android: remove () Fragment-- add () new Fragment der gleichen Klasse wieder onCreateView und onActivityCreated nicht aufgerufen?

8

Ich zerstöre ein programmatisch erzeugtes Fragment mit:

%Vor%

Was in der XML-Datei wie folgt festgelegt ist:

%Vor%

Wenn ich dann in der Mainactivity wieder ein Fragment aus derselben Klasse anlege:

%Vor%

Dann scheint onCreate nicht erneut aufgerufen zu werden (das Fragment ist einfach leer). Was mache ich hier falsch? Danke.

    
user2212461 18.12.2013, 17:01
quelle

1 Antwort

5

Erläuterung: Warum FrameLayout für Fragment

Was ist FrameLayout :

Laut Google-Dokumentation zu Commons Layouts und dieser Antwort von Was sind die Unterschiede zwischen LinearLayout, RelativeLayout und AbsoluteLayout? , die ViewGroup s als LinearLayout , RelativeLayout , AbsoluteLayout (dekrptiert) , TableLayout usw. erlauben es, Ansichten anzuzeigen:

  1. LinearLayout: "zeigt Ansichten nacheinander an"
  2. RelativeLayout: "zeigt Ansichten bezüglich einer anderen Ansicht an"
  3. TableLayout: "zeigt Ansichten in einer Tabelle an"
    usw.

FrameLayout zeigt Ansichten nach Überlappung die andere an. Es wird im Allgemeinen verwendet, um Layouts zu enthalten:

  

"Frame-Layouts stellen eine der einfachsten und effizientesten Layout-Typen dar, die von Android-Entwicklern zum Organisieren von Ansichtskontrollen verwendet werden. Sie werden weniger häufig als andere Layouts verwendet, weil sie normalerweise nur eine Ansicht oder Ansichten anzeigen die sich überlappen. Das Rahmenlayout wird oft als Containerlayout verwendet, da es in der Regel nur eine einzige untergeordnete Ansicht hat (oft ein anderes Layout, das zum Organisieren mehrerer Ansichten verwendet wird). "

Quelle: FrameLayout MobilTuts

  

"Das Frame-Layout ermöglicht es Entwicklern, nur ein oder mehrere UI-Elemente im Frame-Layout anzuzeigen, aber jedes Element wird oben links auf dem Bildschirm positioniert, und überlappende Elemente werden überlappend angezeigt."

Quelle: Android Frame-Layout für absolute Anfänger

OK, aber warum brauche ich das für Fragment ? (vs LinearLayout oder & lt; fragment & gt;)

Die Google Dokumentation von FrameLayout lautet:

  

"FrameLayout wurde entwickelt, um einen Bereich auf dem Bildschirm auszublenden, um ein einzelnes Objekt anzuzeigen."

FrameLayout hostet ein Layout und ist dafür gewillt. Während der Rest von ViewGroup s nur Ansichten anzeigt. Du kannst Fragment in allen ViewGroup s machen (Ich habe das getestet, es war eine Überraschung für mich) , aber es wird keine richtige Methode sein, dies zu tun. Die FrameLayout sind:

  

"... das normale Layout der Wahl, wenn Sie Ansichten überlappen möchten."

Wenn Sie ein Layout mit einem <fragment .../> erstellen, wird Ihr Fragment nicht durch ein anderes ersetzt, da es angezeigt wird. Es wird mit seiner ID in der Ansicht "angefügt". Um ein Fragment zu ersetzen, müssen Sie es hosten: "Durch das Einkapseln des Fragments in ein FrameLayout können Sie nur die Details" ersetzen (siehe diese Antwort ).

Denken Sie daran, dass FrameLayout s leer sind und ein Layout hosten können. Fragment s ( Fragment-Dokumentation von Google , es erklärt sehr einfach die Fakten zur Verwendung eines Fragments) Wenn sie in xml deklariert sind, müssen sie eine Klasse haben (eine ID), die nicht ersetzt werden kann Aus diesem Grund benötigen wir einen Container , um dieses Fragment zu hosten und überlappt die Ansicht der Aktivität!

Ich hoffe, das wird hilfreich sein.

Hinweis: Wenn jemand diese Antwort bearbeiten möchte, weil etwas nicht erklärt oder schlecht erklärt werden kann, könnte er / sie das von Herzen.

    
Fllo 19.12.2013 13:49
quelle