Ich habe eine Hauptaktivität: Wenn ich auf eine Schaltfläche klicke und eine neue Aktivität starte, habe ich dazu den folgenden Code verwendet:
Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
Der obige Code wurde von der Hauptaktivität ausgeführt.
Jetzt habe ich in meiner neuen Aktivität, die von der Hauptaktivität aufgerufen wird, einen Zurück-Button. Wenn ich auf diese Zurück-Schaltfläche klicke, soll meine neue Aktivität geschlossen werden und zur ursprünglichen Hauptaktivität zurückkehren.
Ich habe versucht anzurufen super.finish()
und nur finish()
(von der neuen Aktivität), aber dies schließt dann meine gesamte Anwendung (einschließlich meiner Hauptaktivität).
Wie kann ich die aktuell fokussierte Aktivität einfach schließen und dann zur Hauptaktivität zurückkehren?
BEARBEITET
Die Tatsache, dass die Zurück-Taste meines Telefons auch meine gesamte App schließt, lässt mich denken, dass ich die zweite Aktivität falsch gestartet habe?
OK, ich habe gesucht,
Ich habe eine Einstellungsaktivität erstellt, die denselben Manifestcode und denselben Code zum Starten der Aktivität verwendet.
Bei den Einstellungen Aktivität kehrt die Hauptaktivität zurück, wenn ich die Zurück-Taste drücke.
Mit der oben in der Hauptfrage erwähnten Aktivität wird einfach meine gesamte App beendet.
Das Problem scheint also nicht der Code zum Beenden der Aktivität zu sein, sondern die Aktivität selbst.
quelle
Antworten:
Ich denke, Sie rufen die
finish()
Methode auf,MainActivity
bevor Sie beginnenSettingsActivity
.Das von Ihnen beschriebene Szenario tritt auf zwei Arten auf:
ENTWEDER
Sie haben
android:noHistory = "true"
fürMainActivity
innen eingestellt,AndroidManifest.xml
was dazu führtMainActivity
, dassfinish
beim Drücken der Zurück-Taste automatisch.ODER
Vor der Umstellung auf Ihren SettingsActivity ', haben Sie genannt
finish()
in IhremMainActivity
, was sie tötet. Wenn Sie die Zurück-Taste drücken, kehrt der Hauptbildschirm zurück, da im Stapel keine andere Aktivität zum Popup voreingestellt ist.quelle
Sie können zur vorherigen Aktivität zurückkehren, indem Sie in der Aktivität, in der Sie sich befinden, einfach finish () aufrufen. Beachten Sie, dass jeder Code nach dem Aufruf von finish () ausgeführt wird. Sie können einfach nach dem Aufruf von finish () eine Rückgabe durchführen, um dies zu beheben.
Wenn Sie die Ergebnisse zu Aktivität 1 zurückgeben möchten, benötigen Sie beim Starten von Aktivität 2 Folgendes:
Innerhalb Ihrer aufgerufenen Aktivität können Sie dann die Absicht über den Parameter onCreate () abrufen oder verwenden
Um ein Ergebnis festzulegen, geben Sie es in Aktivität eins zurück, dann in Aktivität zwei
Wenn Sie nicht die Absicht haben zurückzukehren, sagen Sie einfach
Wenn die Aktivität zu schlechten Ergebnissen führt, können Sie Activity.RESULT_CANCELED verwenden (dies wird standardmäßig verwendet). Dann machst du in Aktivität eins
Um Aktivität zwei zu beenden, verwenden Sie dieselben Methoden mit finish () wie oben beschrieben, wobei Ihre Ergebnisse bereits festgelegt sind.
quelle
Wenn Sie auf Ihre Schaltfläche klicken, können Sie sie aufrufen lassen:
quelle
Wenn Sie Fragment verwenden, sollten Sie verwenden
Wenn Sie eine einzelne Aktivität verwenden, können Sie diese verwenden
quelle
Versuchen Sie diesen Code anstelle von
finish
:onBackPressed();
quelle
Du machst das zu schwer. Wenn ich verstehe, was Sie richtig machen wollen, erledigen die integrierte Schaltfläche "Zurück" und Android selbst die ganze Arbeit für Sie: http://developer.android.com/guide/components/tasks-and-back- stack.html
Das Implementieren einer benutzerdefinierten Schaltfläche "Zurück" verstößt außerdem gegen die Core App-Qualitätsrichtlinie UX-N1: http://developer.android.com/distribute/googleplay/quality/core.html
quelle
quelle
Dies schließt die gesamte Anwendung:
quelle
Ich glaube, Ihre zweite Aktivität hängt wahrscheinlich nicht mit Ihrer Hauptaktivität als Kinderaktivität zusammen. Überprüfen Sie Ihre
AndroidManifest.xml
Datei und prüfen Sie, ob der<activity>
Eintrag für Ihre untergeordnete Aktivität einandroid:parentActivityName
Attribut enthält. Es sollte ungefähr so aussehen:quelle
Rufen
finish()
Sie einfach nicht Ihren an,MainActivity
dann entfällt die Notwendigkeit, IhrenonBackPressed()
in Ihrem zu überschreiben, esSecondActivity
sei denn, Sie tun andere Dinge in dieser Funktion. Wenn Sie die „Notwendigkeit“ für diese Back - Button fühlen , dann können Sie rufen Sie einfachfinish()
auf dasSecondActivity
und das wird Sie Ihren nehmenMainActivity
, solange Sie nicht genannt habenfinish()
auf siequelle
Activity
war oder immer zurück zu demMainActivity
? Wenn Ihnen der Speicherplatz ausgehtBitmaps
, sollten Sie diesen Teil der Dokumentation lesen . Es hat mir geholfenIch weiß nicht, ob dies überhaupt nützlich ist oder nicht, aber ich hatte mit dem gleichen Problem zu kämpfen und fand einen ziemlich einfachen Weg, nur mit einer globalen booleschen Variablen und einer onResume () -Aktion. In meinem Fall sollte meine Aktivität C, wenn Sie auf eine bestimmte Schaltfläche klicken, das Ende () von Aktivität B auslösen!
Aktivität_A -> Aktivität_B -> Aktivität_C
Activity_A (öffnet normalerweise Activity_B)
Activity_B (bei einigen Schaltflächen öffnet sich Activity_C):
Wenn ich also auf die Schaltfläche in Aktivität C klicke, wird die Funktion "onResume ()" von Aktivität B ausgeführt und ich gehe zurück zu Aktivität A.
quelle
Versuchen Sie dies, es funktioniert sowohl auf der Symbolleisten-Zurück-Schaltfläche als auch auf der Hardware-Zurück-Schaltfläche .
quelle
android:parentActivityName=".MainActivity"
für die zweite. Dieser Code behandelt diese Home / Back- Schaltfläche im Toolbat und beendet gerade die aktuelle Aktivität, die zur vorherigen im Stapel zurückkehrt. Vielen Dank.Fertig stellen schließt die gesamte Anwendung, dies ist etwas, das ich in der Android-Entwicklung hasse, nicht fertig zu stellen, das ist in Ordnung, aber dass sie nicht mit der guten Syntax mithalten, die sie haben
Warum nicht
quelle
Wir sind auf eine sehr ähnliche Situation gestoßen.
Falsche Antwort "Zurück drücken"
Ich habe alle oben geposteten Antworten überprüft und keine davon hat funktioniert. Die Java-Syntax für den Übergang zwischen Aktivität 2 und Aktivität 3 wurde auf Richtigkeit überprüft.
Frisch vom Codieren beim Aufrufen einer Drittanbieter-App. durch eine Aktivität. Wir haben uns entschlossen, den Konfigurationswinkel zu untersuchen, um schließlich die Hauptursache des Problems zu identifizieren.
Geltungsbereich : Konfiguration von Aktivität 2 (Anrufer).
Grundursache :
Lösung :
Anscheinend berücksichtigt singleInstance in diesem Fall "on back press" aufgerufene Aktivitäten in einer Instanz mit der aufrufenden Aktivität, während singleTask es ermöglicht, dass aufgerufene Aktivitäten ihre eigene Identität haben, damit die beabsichtigte on back press so funktioniert, wie sie sollte.
quelle
Versuchen Sie diese Methode ..
quelle
Möglicherweise rufen Sie finish () auf. Wenn Sie auf die Schaltfläche klicken und die Hauptaktivität unmittelbar nach dem Klicken auf die Schaltfläche geschlossen wird, wird die Anwendung beendet, da die Hauptaktivität bereits geschlossen ist und keine aktive Aktivität vorhanden ist.
quelle
on onCreate Methode Ihrer Aktivität schreiben Sie den folgenden Code.
Überschreiben Sie dann die von onOptionsItem ausgewählte Methode Ihrer Aktivität wie folgt
Und du bist gut zu gehen.
quelle
Sie müssen dies in Ihrer MainActivity verwenden
Das Flag startet mehrere Aufgaben, die Ihre Hauptaktivität beibehalten. Wenn Sie "Fertig stellen" aufrufen, wird die andere Aktivität beendet und Sie kehren zur Hauptaktivität zurück
quelle