2016-07-15 21 views
2

Finishing ist habe ich ein ActivityA und die Gastgeber ein fragmentAWie die Anrufe onCreate/onCreateView Methoden zu verhindern, wenn die Aktivität

onAttach() Methode von fragmentA, ich brauche einige Bedingungen zu überprüfen und wenn es fehlschlägt, muss ich Beende die Aktivität. Ich beende die Aktivität unter getActivity().finish().

Selbst nachdem ich das Ziel-Methode aufrufen, ist es immer noch die onCreate(), onCreateView() und onViewCreated() Methoden in fragmentA ruft.

Gibt es eine Möglichkeit, diese Anrufe zu stoppen?

+2

Können Sie diese Bedingungen überprüfen, bevor Sie das Fragment zur Aktivität hinzufügen? – DeeV

+0

Danke für deinen Vorschlag DeeV. In meinem Fall brauche ich diese einchecken onAttach() -Methode –

Antwort

1

Wie @DeeV kommentierte, würde ich die Bedingungen vor dem Anbringen einer Fragment überprüfen. In diesem Fall müssen Sie sich nicht mit dem Fragment-Lebenszyklus beschäftigen, was eine sauberere Methode ist.

Wenn das nicht möglich ist, gibt es einen hacky Weg. Sie können finish() in onAttach() aufrufen und dann die Methode isFinishing() von activity verwenden, die einen boolean Flag zurückgibt. Ich denke, das sollte das Problem lösen.

z. in Ihrem Fragment Methode:

if (getActivity().isFinishing()) { 
    // finish was called in onAttach 
} 
+0

Danke Gennadii ja, das ist eine Option, aber dann muss ich isFinishing() einchecken alle Methoden wie onCreate(), onViewCreated(), onViewRestored () Methoden. Also frage mich, ob es andere Optionen gibt als das Hinzufügen dieser Prüfung in diesen Methoden –

+0

Nein, ich denke nicht, dass es möglich ist, dies zu vermeiden. Die Funktionsweise bei Android besteht darin, dass Nachrichten wie 'onCreate()', 'onStart()' usw. der UI-Nachrichtenwarteschlange hinzugefügt werden. Dies bedeutet, dass sie verarbeitet werden, sofern Sie sie nicht explizit aus der Warteschlange entfernen. Und natürlich können Sie sie nicht aus der Warteschlange entfernen, weil Sie dafür kein 'Runnable' oder Token haben. Sie machen entweder diesen Hacky-Weg mit dem 'isFinishing()' -Methodenaufruf oder versuchen, das Anhängen des Fragments selbst zu vermeiden. Sind Sie sicher, dass Sie das nicht vermeiden können? Ich denke, das sollte Ihr Hauptaugenmerk sein, um das Fragment-Attach-Ereignis zu vermeiden. –

+0

Die ganze Situation sieht für mich falsch aus: Fragment entscheidet, ob es die Aktivität schließen soll, wenn es sich daran anfügt. 'onAttach' soll nur für Verknüpfungszwecke verwendet werden, wie zum Beispiel das Speichern einer Aktivitätsreferenz und das Umsetzen auf eine Schnittstelle, die das Fragment für die Interaktion mit der Aktivität verwendet. Ich bin mir also ziemlich sicher, dass das Problem in Ihrem Anwendungsfall selbst liegt, nicht in Fragment-Callbacks. Das ist, warum Sie diese Hacks im Grunde tun müssen. Fragment soll nicht so benutzt werden. –