Wann werden Android-Fragmente manuell angehängt / entfernt?

9

Ich habe die Fragments-Dokumentation eingehend gelesen und habe keine Referenzen gesehen zum FragmentTransaction.attach () oder FragmentTransaction.detach () Methoden. Allerdings habe ich mehrere Tutorials und Demos gefunden, wo sie sie tatsächlich verwenden (wie FragmentTabs Demo ). Meine Frage ist:

  1. In der Theorie, wann soll man Fragmente von Hand anhängen ?
  2. Was passiert genau, wenn ein Fragment angehängt / gelöst wird? (Wird es erstellt / zerstört? pausiert / fortgesetzt? etc?)
  3. Ist es eine gute Übung, Ihre Fragmente von Hand anzuhängen / zu lösen ?
  4. ?

Danke!

    
Andrés Pachon 29.05.2012, 15:53
quelle

1 Antwort

1

Fragmente werden vom Android-Entwicklungsteam als Weg vorwärts gedrängt. Der Grund für ihre Einführung ist an verschiedenen Stellen im Internet dokumentiert, auf die ich hier nicht eingehen werde. Ein Grund für ihre Einführung besteht darin, dem Entwickler zu ermöglichen, bestimmte Funktionen seiner Anwendungen in (fast) eigenständige Module einzubetten, die je nach Bedarf geladen und entladen werden können, und die Vielzahl der für die Android-Plattform verfügbaren Gerätebildschirme zu maximieren. p>

Leider (meiner bescheidenen Meinung nach) gibt es einige Feinheiten, die mit den Fragmenten kommen, die den unachtsamen Entwickler herausholen können (ich bin einer von ihnen). Obwohl ich nicht behaupten kann, bei Fragmenten Autorität zu haben, kann ich weitergeben, was ich entdeckt habe, wenn ich sie benutze. Also, um deine Fragen zu beantworten:

Ich glaube nicht, dass es hartnäckige Regeln gibt, wenn Sie attach()/detach() Fragmente von Hand einfügen sollten. Es kann jedoch vorkommen, dass Sie ein Fragment lösen möchten, anstatt es durch ein anderes zu ersetzen. Beachten Sie jedoch, dass das Fragment nicht zerstört wird, wie in den Dokumenten

  

Trennen Sie das angegebene Fragment von der Benutzeroberfläche. Dies ist derselbe Zustand wie bei der Platzierung auf dem Backstack: Das Fragment wird aus der Benutzeroberfläche entfernt, sein Status wird jedoch vom Fragmentmanager weiterhin aktiv verwaltet. Wenn man in diesen Zustand geht, wird seine Ansichtshierarchie zerstört.

Das Fragmentobjekt ist zerstört, aber es ist ein sichtbares Element (falls vorhanden). Wenn das Fragment erneut mit attach() verknüpft wird, wird seine Ansichtshierarchie neu erstellt ( Dokumente ):

  

Fügen Sie ein Fragment erneut an, nachdem es zuvor mit detach (Fragment) von der Benutzeroberfläche getrennt wurde. Dadurch wird die Ansichtshierarchie neu erstellt, an die Benutzeroberfläche angehängt und angezeigt.

Das ist, wie ich herausgefunden habe, nicht besonders nützlich, wenn Ihr Fragment im Hintergrund die Ansichtshierarchie aktualisieren muss, damit es sofort auf dem neuesten Stand ist, wenn Sie wieder in View kommen. Das Endergebnis ist, dass Sie ein "hässliches" Remix Ihres Fragments erhalten. Ich meine hässlich in dem Sinne, dass es Ihrer App den Anschein gibt, sich hastig und unprofessionell neu zu zeichnen, anstatt eine viel mehr begehrenswerte Slick-Version, die sofort aus der Luft kommt.

Wenn die Pflege einer aktuellen Fragment UI von entscheidender Bedeutung ist, gibt es Möglichkeiten, diese Neuzeichnung zu vermeiden. Anstatt Ihre Fragmente anzuhängen und zu lösen, können Sie einfach show () und hide () . Dies vermeidet die Neuerstellung Ihrer Ansichtshierarchie, aber Sie müssen darauf achten, dass nichts in Ihrer Ansicht versucht, sich selbst neu zu zeichnen, während das Fragment ausgeblendet ist. Dies wird zu einer Ausnahme führen (denke ich. Es ist eine Weile her, seit ich mit diesem Zeug herumgebastelt habe).

Es ist nichts falsch daran, Fragmente mit der Hand anzubringen und zu entfernen, und Sie sollten sich wahrscheinlich denken, dass diese Methoden von den Android-Entwicklern als "Just-in-Case" zur Verfügung gestellt werden. Außerdem rufe ich image replace() trotzdem auf diese atomaren Methoden auf.

Soweit Fragmente zerstört werden, werden sie natürlich zerstört, wenn eine App geschlossen wird, ansonsten vermute ich, dass sie einfach in die normale Müllroutine fallen (aber zitiere mich nicht dazu!). Wenn keine Referenzen auf das Objekt vorhanden sind, wird es für die Zerstörung markiert.

    
Kerry 05.03.2013 21:55
quelle

Tags und Links