Wenn die Taste ZURÜCK am Telefon gedrückt wird, möchte ich verhindern, dass eine bestimmte Aktivität zu ihrer vorherigen zurückkehrt.
Insbesondere habe ich Anmelde- und Anmeldebildschirme. Beide starten eine neue Aktivität, die aufgerufen wird, HomeScreen
wenn eine erfolgreiche Anmeldung / Anmeldung erfolgt. Nach dem Start von HomeScreen möchte ich verhindern, dass die Benutzer durch Drücken der Taste ZURÜCK zum Anmelde- oder Anmeldebildschirm zurückkehren können.
Ich habe es versucht Intent.FLAG_ACTIVITY_NO_HISTORY
, aber da die Anwendung über eine Facebook-Integration verfügt, sollte Facebook bei Verwendung von "Mit Facebook anmelden" zum ursprünglichen Anmeldebildschirm zurückkehren und daher einen Verlauf dieser Aktivitäten führen.
Ich dachte daran, das Verhalten der Schaltfläche ZURÜCK zu überschreiben HomeScreen
, um eine Anwendung direkt zu beenden, wenn die Schaltfläche gedrückt und verwendet wird
@Override
public void onBackPressed() {
finish();
}
das geht aber auch nicht.
Antworten:
Mein Vorschlag wäre, die Aktivität zu beenden, zu der die Benutzer nicht zurückkehren sollen. Rufen Sie beispielsweise in Ihrer Anmeldeaktivität direkt nach Ihrem
startActivity
Anruf anfinish()
. Wenn die Benutzer auf die Schaltfläche "Zurück" klicken, können sie nicht zur Anmeldeaktivität wechseln, da diese vom Stapel entfernt wurde.quelle
finish
während eines gemeinsamen Übergangs anrufen , wird möglicherweise die vorherige Aktivität durchgebrannt. zB wenn SieHomeActivity
->IntermediateActivity
->FinalActivity
und rufen Siefinish()
in derIntermediateActivity
unmittelbar nach dem Start derFinalActivity
Sie das sehen werdenHomeActivity
für einen kurzen Moment.Die folgende Lösung kann im üblichen Anmelde- / Hauptaktivitätsszenario oder bei der Implementierung eines Sperrbildschirms sehr nützlich sein.
Um die App zu minimieren, anstatt zur vorherigen Aktivität zurückzukehren, können Sie Folgendes überschreiben
onBackPressed()
:moveTaskToBack(boolean nonRoot)
Lässt Ihren Backstack so wie er ist, stellt Ihre Aufgabe (alle Aktivitäten) einfach in den Hintergrund. Gleich wie wenn der Benutzer die Home-Taste gedrückt hat .Parameter
boolean nonRoot
- Wenn false, funktioniert dies nur, wenn die Aktivität die Wurzel einer Aufgabe ist. Wenn dies der Fall ist, funktioniert es für jede Aktivität in einer Aufgabe.quelle
Ich bin mir nicht sicher, was Sie genau wollen, aber es klingt so, als ob es möglich sein sollte, und es klingt auch so, als wären Sie bereits auf dem richtigen Weg.
Hier sind einige Links, die helfen könnten:
Deaktivieren Sie die Zurück-Schaltfläche in Android
Wie kann ich das Zurückkehren zu einer Aktivität deaktivieren?
quelle
System.exit(0)
folgt aufgerufen wird (ich weiß, dass dies nicht die beste Vorgehensweise ist, aber ich wollte nur ein Beispiel geben).Für Ihren Fall gibt es zwei Lösungen: Aktivität A startet Aktivität B, Sie möchten jedoch nicht zu Aktivität A in Aktivität B zurückkehren.
1. Vorherige Aktivität A vom Backstack entfernt.
2. Deaktiviert die Aktion "Zurück" in Aktivität B.
Es gibt zwei Möglichkeiten, um ein Zurück-Ereignis zu verhindern:
1) Ansatz empfehlen
2) OnKeyDown-Methode überschreiben
Hoffe, dass es nützlich ist, aber immer noch von Ihren Situationen abhängt.
quelle
finish()
. Unnötig überlegt mitnohistory
Attributen, Absichtsflags, Manifest-Tags für übergeordnete Aktivitäten usw.! Dumm, danke für die Antwort!Da bereits viele großartige Lösungen vorgeschlagen wurden, versuche ich, eine dipiktivere Erklärung zu geben.
Entfernen Sie die vorherige Aktivität aus dem Backstack. Einfach
finish()
Methode aufrufenDer normale Fluss:
Alle Aktivitäten werden in einem Stapel gespeichert, der als Backstack bezeichnet wird.
Wenn Sie eine neue Aktivität (
startActivity(...)
) starten, wird die neue Aktivität an den oberen Rand des Stapels verschoben, und wenn Sie die Zurück-Taste drücken, wird die Aktivität aus dem Stapel entfernt.Ein wichtiger Punkt ist, dass beim Drücken der Zurück-Taste die
finish();
Methode intern aufgerufen wird. Dies ist das Standardverhalten der onBackPressed () -Methode.Wenn Sie also Aktivität B überspringen möchten?
Fügen Sie einfach die
finish();
Methode nach IhrerstartActvity(...)
in Aktivität B hinzuquelle
finish()
gibt Ihnen die Methode, um die aktuelle Aktivität nicht die gesamte Anwendung zu schließen. Und Sie sollten besser nicht nach Methoden suchen, um Anwendungen zu beenden. Kleiner Rat.Haben Sie versucht, Konjunktion von
Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_NO_HISTORY
? Denken Sie daran, diese Flags beimIntent
Starten der Aktivität zu verwenden!quelle
FLAG_ACTIVITY_NO_HISTORY
verhindert, dass mein LoginScreen den Rückruf von Facebook erfasst, wenn Login mit Facebook verwendet wird. Denn sobald der Fokus vom LoginScreen ausgeht, kann er nicht mehr fortgesetzt werden (da kein Verlauf vorhanden ist). Aber ich habe es nicht ausprobiertIntent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
, ich werde es überprüfen, danke!finish()
Methode, ich wusste nichts davon.Setzen Sie
finish()
gleich danachquelle
Die Antwort von paulsm4 ist die richtige. Wenn
onBackPressed()
Sie gerade zurückkehren, wird die Zurück-Schaltfläche deaktiviert. Ich denke jedoch, dass ein besserer Ansatz in Anbetracht Ihres Anwendungsfalls darin besteht, die Aktivitätslogik umzudrehen, dh Ihre Heimaktivität zur Hauptaktivität zu machen und zu überprüfen, ob der Benutzer dort angemeldet ist. Wenn nicht, starten Sie die Anmeldeaktivität. Der Grund dafür ist, dass die meisten Benutzer verwirrt sind, wenn Sie die Zurück-Schaltfläche in Ihrer Hauptaktivität überschreiben, wenn sie zurück drücken und Ihre App nichts tut.quelle
Wenn Sie nicht zu allen Aktivitäten in Ihrer Anwendung zurückkehren möchten, können Sie verwenden
Weitere Informationen finden Sie hier: http://developer.android.com/guide/topics/manifest/activity-element.html
quelle
Diese Methode funktioniert gut
quelle
Überschreiben Sie einfach die onKeyDown-Methode und prüfen Sie, ob die Zurück-Taste gedrückt wurde.
quelle
Wenn Sie erstellen,
onBackPressed()
entfernen Sie einfachsuper.onBackPressed();
und das sollte funktionierenquelle
Stellen
Unmittelbar nach ActivityStart, um die Aktivität zu stoppen und zu verhindern, dass Sie dorthin zurückkehren können. Dann füge hinzu
zu der Aktivität, die Sie starten.
quelle