Wie drücke ich die Zurück-Taste in Android programmgesteuert?

78

In meiner App habe ich eine Abmeldefunktion. Wenn der Benutzer auf Abmelden klickt, wird der Startbildschirm aufgerufen. Jetzt beende ich meine App durch Drücken der Zurück-Taste. Was ich aber möchte, ist, dass ich automatisch (dh programmgesteuert) genauso beenden muss wie die Funktion der Zurück-Schaltfläche. Ich weiß, dass durch Aufrufen von finish () die Funktionalität ausgeführt wird. Aber die Sache ist, dass es zur vorherigen Aktivität geht.

vinothp
quelle
Auch wenn Sie die Zurück-Taste drücken, wird die vorherige Aktivität angezeigt ...
Tarun
8
benutze einfach finish ();
VJ
1
@Tarun Ich verwende diesen Code, um den gesamten Verlauf zu löschen. ExitActivity.this.finish (); Intent intent1 = new Intent (ExitActivity.this, PinActivity.class); intent1.setFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity (intent1);
Vinothp
@ user1216003 Sie sind auf dem richtigen Weg. Sie tun dasselbe wie die Zurück-Schaltfläche, indem Sie das Flag absichtlich setzen.
VJ

Antworten:

121

onBackPressed()wird unterstützt seit: API Level 5

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK)) {
        onBackPressed();
    }
}

@Override
public void onBackPressed() {
    //this is only needed if you have specific things
    //that you want to do when the user presses the back button.
    /* your specific things...*/
    super.onBackPressed();   
}
Tarun
quelle
3
Was ist der Sinn davon? Sie schreiben, was Android standardmäßig tut. Es ruft onBackPressed () auf, wenn die Zurück-Taste gedrückt wird. Habe ich recht?
Drulabs
3
@KKD Wenn Sie API unter 5 unterstützen müssen, müssen Sie wie oben verwenden .. android-developers.blogspot.co.uk/2009/12/…
Tarun
1
Dann ist onBackPressed los ... Starten Sie Ihren ExitIntent in onBackPressed ()
Tarun
1
Vielen Dank für Ihren Kommentar. Ich verwende nicht die Schaltfläche "Zurück". Ich verwende die Schaltfläche "Abmelden". Wenn der Benutzer darauf klickt, füllen Sie den Dialog mit der Frage "Ja oder Nein". Wenn ja, wird der Startbildschirm angezeigt, auf dem ich automatisch beenden muss, aber ich bin dort geblieben ... Dies ist notwendig, weil ich die Alarmfunktion in meiner App verwende. Wann immer der Alarm die Meldung auf dem Startbildschirm als Hintergrund anzeigt. Also muss ich ihn entfernen, das ist, was ich versuche ...
vinothp
Ich hatte Probleme mit onBackPressed () auf einigen Tablets, wie beim Absturz.
Demonick
41

Sie müssen nicht überschreiben onBackPressed()- es ist bereits als die Aktion definiert, die Ihre Aktivität standardmäßig ausführt, wenn der Benutzer die Zurück-Taste drückt. Rufen onBackPressed()Sie einfach an, wann immer Sie die Zurück-Taste "programmgesteuert drücken" möchten.

Das würde allerdings nur dazu führen, finish()dass man angerufen wird;)

Ich denke, Sie sind verwirrt mit dem, was der Zurück-Knopf tut. Standardmäßig ist es nur ein Aufruf von finish(), sodass die aktuelle Aktivität nur beendet wird. Wenn Sie etwas hinter dieser Aktivität haben, wird dieser Bildschirm angezeigt.

Wenn Sie Ihre Aktivität über die Anmeldung starten, fügen Sie ein CLEAR_TOP-Flag hinzu, damit die Anmeldeaktivität nicht vorhanden ist, wenn Sie Ihre beenden.

Josephus
quelle
Hallo, danke für deine Antwort. Es hört sich gut an, aber ich habe versucht, dass dein Ansatz erneut im selben Anmeldebildschirm
landet. Könntest
1
Dies ist die richtige Antwort, aber Sie sollten sie bearbeiten, da es nicht immer "nur ein Aufruf zum Beenden ()" ist. In meinem Fall (und es funktioniert genau so, wie ich es beabsichtige) ist es eine Möglichkeit, sich rückwärts durch den Fragmentstapel zu bewegen, und ruft finish () erst auf, wenn Sie das allererste Element auf diesem Stapel erreicht haben.
Jewgeni Simkin
9

Manchmal ist es nützlich, die Methode onBackPressed () zu überschreiben, da sie, wenn Sie mit Fragmenten arbeiten und zwischen ihnen wechseln, wenn Sie die Zurück-Taste drücken, zum vorherigen Fragment zurückkehren.

Serj Moya
quelle
1
Dies ist genau richtig und verdient mehr Gegenstimmen.
Jewgeni Simkin
5

Rufen Sie an, onBackPressednachdem Sie es in Ihrer Aktivität überschrieben haben.

Drulabs
quelle
2
Vielen Dank für Ihren Kommentar. OnBackPressed Ich kann Code einfügen, wenn die Zurück-Taste gedrückt wird. Ich möchte die Zurück-Taste automatisch
aufrufen. Bin
Machen Sie eine Sache ... wo immer Sie anrufen möchten, wann immer Sie anrufen möchten, rufen Sie einfach diese Funktion auf. Sie können es in onCreate basierend auf einem Flag oder einem beliebigen Ereignis aufrufen.
Drulabs
1

Sie können einfach onBackPressed () verwenden;

oder wenn Sie Fragment verwenden, können Sie getActivity () verwenden. onBackPressed ()

Abhishek Patil
quelle
0

Fügen Sie einfach finish () hinzu. in Ihrer ersten Klasse '(Anmeldeaktivität) onPause (); Methode. das ist alles

dbs ray
quelle