2012-11-24 5 views
6

Ich muss Code ausführen, immer wenn ein Fragment für den Benutzer angezeigt wird.Android-Fragmente: Lifecycle-Methode * immer * aufgerufen, wenn das Fragment angezeigt wird?

Wenn ich durch die API gucke, ist die engste Hook-Methode, die ich sehen konnte, onResume. Vom Debuggen über meinen Code scheint onResume jedoch nicht aufgerufen zu werden, wenn der Benutzer die Zurück-Schaltfläche auswählt, um zu einem zuvor angezeigten Fragment zurückzukehren.

einfach das Verhalten zu klären ich bin Mit:

Ich habe eine Aktivität ‚Eltern‘, die Tabs in einer ActionBar konfiguriert ... und 2-Fragmente F1 und F2.

Der Benutzer wählt eine Registerkarte und F1 wird in die Aktivität geladen. Auf Knopfdruck kann der Benutzer zu F2 navigieren. Dies ist keine separate Registerkarte ... F2 wird in das Layout getauscht.

Protokollanweisungen Hinzufügen, ich kann sehen, dass, wenn der Benutzer die Back-Taste auf F2 wählt, passiert folgendes ....

1) onPause() auf F2 bezeichnet. 2) F1 wird in die Aktivität geladen ... aber onResume() auf F1 ist nicht genannt

Es gibt keine Fehler in den Protokollen zu diesem Zeitpunkt.

Irgendwelche Ideen, was ich hier falsch mache?

Vielen Dank im Voraus,

Neil.

+0

Sie sollten immer Ihren relevanten Code veröffentlichen, damit wir sehen können, was passiert. Fügen Sie jedes Fragment zum Backstack hinzu? – Sam

+0

Danke Sam. Während ich meine Frage bearbeitete und den Code hinzufügte, bemerkte ich, dass mein Fehler in meinem Fragmentwechselcode war. Ich habe eine Antwort hinzugefügt, die erklärt. Prost. – Neil

Antwort

9

Ok, es scheint, dieses war Pilot-Fehler. Mein ursprünglicher Code zwischen den Fragmenten in einer Aktivität zu wechseln war ....

public void switchFragment(Fragment newFragment, String tag) { 
    getSupportFragmentManager() 
      .beginTransaction() 
      .add(android.R.id.content, newFragment) 
      .addToBackStack(tag) 
      .commit(); 
} 

Der Aufruf() im obigen Code hinzuzufügen eigentlich sein sollte() zu ersetzen. Es scheint, dass das Ersetzen des Fragments in der Aktivität nicht mit dem Zurück-Schaltflächen-Verhalten übereinstimmt.

Ich muss ehrlich sein und zugeben, ich bin nicht 100% sicher, warum genau das passiert. Nach der Änderung wird jedoch die onResume() -Methode für das Zielfragment aufgerufen, sobald die Zurück-Schaltfläche aufgerufen wird.

+4

aufgerufen werden, so dass Sie meine Antwort downvoted, weil Sie vermasselt? Wie schön ... –

+20

Ich habe nicht den Ruf, um zu downvote. Ich hätte dich tatsächlich aufgestuft, nur wegen der Komik, falsch geschrieben zu haben, RTFM. – Neil

+6

Spiel nett Kinder. – Sandy

1

Dieses Bit ungerade Frage, weil jede vorhandene Klassenmethode garantiert aufgerufen wird, wenn das Ereignis, für das diese bestimmte Methode aufgerufen wurde, auftritt und alle Bedingungen erfüllt sind. Wählen Sie eine Aufgabe, die Sie am besten erreichen möchten. Siehe docs here

enter image description here

+6

Das ist ein bisschen eine seltsame Antwort, da Sie in Ihrer Eile, klug zu sein, Ihre Frage offensichtlich nie gelesen haben. Und ich habe "RTFM" (ich nehme an, das ist es was du meintest) und das "Handbuch" hat mir nicht geholfen. Wie ich erklärte, gibt es keine Lebenszyklus-Methode, die ich sehen kann, die garantiert aufgerufen wird, wenn ein Fragment durch einen Druck auf den Zurück-Knopf zurückgegeben wird. – Neil

+1

Welches Element des Diagramms in meiner Antwort ist unklar? –

+6

Das gesamte Diagramm ist klar, da es Teil der Android-Javadoc ist - aber es beantwortet meine Frage nicht. – Neil

Verwandte Themen