Ich habe ein Fragment in einer Aktivität, die ich als Navigationsschublade verwende. Es enthält Schaltflächen, mit denen beim Klicken neue Aktivitäten gestartet werden (startActivity aus einem Fragment ruft einfach startActivity für die aktuelle Aktivität auf).
Für mein Leben kann ich nicht herausfinden, wie ich die aktuelle Aktivität beenden würde, nachdem ich eine neue begonnen habe.
Ich möchte im Fragment so etwas erreichen:
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
if (view == mButtonShows) {
Intent intent = new Intent(view.getContext(), MyNewActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
}
}
Es scheint jedoch, dass Fragment.class finish () nicht implementiert (wie es startActivity (...) implementiert).
Ich möchte, dass der Aktivitäts-Backstack gelöscht wird, wenn die 2. Aktivität gestartet wird. (Wenn Sie also von der neuen Aktivität zurückdrücken, werden sie technisch auf den Launcher zurückgesetzt.)
getActivity()
kannnull
in einigen Fällen sein. Was sollen wir dann tun?finish
.Naja eigentlich...
Ich würde das Fragment nicht versuchen lassen, die Aktivität zu beenden. Das gibt dem Fragment meiner Meinung nach zu viel Autorität. Stattdessen würde ich den Leitfaden hier verwenden: http://developer.android.com/training/basics/fragments/communicating.html
Lassen Sie das Fragment eine Schnittstelle definieren, die die Aktivität implementieren muss. Rufen Sie die Aktivität an und lassen Sie die Aktivität entscheiden, was mit den Informationen geschehen soll. Wenn die Aktivität sich selbst beenden möchte, kann sie.
quelle
Wie von Jon F. Hancock erwähnt , kann ein Fragment auf diese Weise die Aktivität "schließen", indem es die zu schließende Aktivität vorschlägt. Dies macht das Fragment portabel, da dies der Grund für sie ist. Wenn Sie es in einer anderen Aktivität verwenden, möchten Sie die Aktivität möglicherweise nicht schließen.
Der folgende Code ist ein Ausschnitt aus einer Aktivität und einem Fragment mit einer Schaltfläche zum Speichern und Abbrechen.
PlayerActivity
PlayerInfoFragment, das eine Schnittstelle enthält, die die aufrufende Aktivität implementieren muss.
quelle
Jedes Mal, wenn ich das Fragment mit "Fertig stellen" schließe, wird die gesamte Aktivität geschlossen. Gemäß den Dokumenten sollten Fragmente so lange verbleiben, wie die übergeordnete Aktivität erhalten bleibt.
Stattdessen habe ich festgestellt, dass ich mithilfe der folgenden Anweisung die Ansichten der übergeordneten Aktivität zurück ändern kann: setContentView (R.layout.activity_main);
Dies bringt mich zurück zur übergeordneten Aktivität.
Ich hoffe, dass dies jemand anderem hilft, der danach sucht.
quelle
Sehr einfach...
1- Ergreifen Sie einfach die Aktivität
getActivity()
im Fragment2- dann anrufen
finish();
getActivity().finish();
Beenden Sie also einfach die übergeordnete Aktivität.quelle
Sie sollten die Methode getActivity () verwenden, um die Aktivität aus dem Fragment abzuschließen.
quelle
Verwenden Sie in Fragment getActivity.finishAffinity ()
Es wird auch das gesamte Fragment, das von der aktuellen Aktivität mit der Aktivität verschoben wurde, aus dem Stapel entfernt ...
quelle
Versuche dies. Es sollte keine Warnung geben ...
quelle
15. Juni 2020 - Aktualisierte Antwort.
Sie haben zwei Möglichkeiten für Java und Kotlin. Die Logik beider Wege ist jedoch gleich. Sie sollten die Aktivität nach der Methode finish () aufrufen .
Wenn Ihre Aktivität nicht null sein kann, verwenden Sie Answer_1 . Wenn Ihre Aktivität jedoch null sein kann , verwenden Sie Answer_2 .
@canerkaseler
quelle
ja
Fragment.class
implementiert nichtfinish()
Verwenden Sie immer, wenn Sie mit Fragmenten arbeiten, anstatt diese zu verwenden oder auf den Kontext zu verweisen
getActivity()
. Sie sollten anrufenquelle