2016-07-31 25 views
1

Ich muss wissen, warum wir immer ein neues Fragment Objekt mit entweder A.newInstance() oder A() instanziieren, wenn wir wissen, dass bereits eine Instanz existiert. Erhöht es nicht den Speicherverbrauch der App in Android?Warum immer newInstance oder Objekt von Fragmenten

In meinem Fall habe ich eine Aktivität und mehrere Fragmente, die durch Menüs im Schubladenfragment geöffnet werden. Diese Fragmente können weitere Fragmente öffnen, die nicht im Menü der Schublade aufgeführt sind. Ich frage mich also, ob es normal ist, jedes Mal neue Instanzen von sekundären Fragmenten durch das oberste Fragment zu erzeugen. Das gleiche gilt für Fragmente der obersten Ebene. Mein Flow wird im Folgenden erläutert:

  1. Fragment A (neue Instanz zum ersten Mal)
  2. Fragment B (untere Ebene Fragment/neue Instanz, instanziiert durch A)
  3. Zurück zu A (durch einen Pfeil nach oben drücken)
  4. Fragment B (untere Ebene Fragment/wieder neue Instanz von einem instanziiert)
  5. Zurück zu A (durch einen Pfeil nach oben drückt)
  6. Fragment X (neue Instanz erstmalig/Top-Level-Fragment/von Schublade Menü)
  7. Fragment A (wieder neue Instanz von A/Top-Level-Fragmente/von Schublade Menü)

Ist es richtig, mehrere Instanzen von Fragmenten A (Top-Level/Punkt 7) und B (untere Ebene/Punkt 4 zu haben,) Wie verwende ich diese Strategie?

Antwort

0

Sie sollten keine neuen Fragmente instanziiert jedes Mal wenn Sie „Umschalten zwischen den Seiten“

Sie sollten sie in die FragmentManager add wenn mit einem Tag (ein optionaler String-Parameter) benötigt, dann sie finden diesen Tag mit (findFragmentByTag) und replace das aktuell gezeigte Fragment, wenn Sie das andere finden könnten. Andernfalls können Sie eine neue Instanz erstellen.

Sie brauchen auch Fragmente auf der Rückseite Stapel (addToBackStack) zu platzieren, glaube ich, so werden sie durch die FragmentManager

+0

Einige zusätzliche Details sein können hier gehalten auf. http://StackOverflow.com/Questions/20825600/findfragmentbytag-returns-null-after-perform-a-fragmenttransaction-using-repla –

+0

Ich benutze 'add()', wie ich onCreateView () Methode des vorherigen Fragments, wenn das aktuelle Fragment aus Backstack herausspringt. Aber nach Ihrer Antwort gehe ich davon aus, dass ich sowohl 'add()' als auch 'replace()' beibehalten muss, um unnötige neue Instanzen zu vermeiden. Es gibt auch keine Beispiele für solche Dinge. Jedes Beispiel zeigt eine neue Instance-Implementierung. –

+0

Irgendwann müssen Sie eine Instanz initialisieren, aber Sie sollten in der Lage sein, diese Instanz mit einem eindeutigen Tag zu einem späteren Zeitpunkt abzurufen, wie ich erklärt –