web-dev-qa-db-de.com

Wie können Sie verhindern, dass Sie zur vorherigen Aktivität zurückkehren?

Wenn die BACK-Taste am Telefon gedrückt wird, möchte ich verhindern, dass eine bestimmte Aktivität zur vorherigen zurückkehrt.

Insbesondere habe ich Anmelde- und Anmeldebildschirme. Beide starten eine neue Aktivität namens HomeScreen, wenn die Anmeldung erfolgreich erfolgt. Nach dem Start von HomeScreen möchte ich verhindern, dass Benutzer durch Drücken der BACK-Taste zu den Anmelde- oder Anmeldebildschirmen zurückkehren können. 

Ich habe versucht, Intent.FLAG_ACTIVITY_NO_HISTORY zu verwenden, aber da die Anwendung über eine Facebook-Integration verfügt, sollte Facebook bei der Verwendung von "Anmelden bei Facebook" zum ursprünglichen Anmeldebildschirm zurückkehren. Daher sollte ich einen Überblick über diese Aktivitäten behalten.

Ich dachte daran, das Verhalten der BACK-Taste auf HomeScreen zu überschreiben, um eine Anwendung direkt zu beenden, wenn die Taste gedrückt wurde und ich sie verwendet habe

@Override
public void onBackPressed() {
    finish();
}

aber das geht auch nicht.

178
ecem

Mein Vorschlag wäre, die Aktivität zu beenden, zu der die Benutzer nicht zurückkehren möchten. Rufen Sie beispielsweise in Ihrer Anmeldeaktivität gleich nach dem Aufruf von startActivityfinish() auf. Wenn die Benutzer auf die Zurück-Schaltfläche klicken, können sie nicht zur Anmeldeaktivität wechseln, da sie vom Stapel abgebrochen wurden.

309
coder

Die folgende Lösung kann im üblichen Anmelde-/Hauptaktivitätsszenario oder beim Implementieren eines Sperrbildschirms sehr nützlich sein.

Um die App zu minimieren, anstatt zur vorherigen Aktivität zurückzukehren, können Sie onBackPressed() wie folgt überschreiben:

@Override
public void onBackPressed() {
    moveTaskToBack(true);
}

moveTaskToBack(boolean nonRoot) belässt Ihren Back-Stack so, wie er ist, und setzt Ihre Aufgabe (alle Aktivitäten) 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 der Stamm einer Aufgabe ist. Wenn dies wahr ist, funktioniert es für jede Aktivität in einer Aufgabe.

91
Marcel Bro

Ich weiß nicht genau, was Sie wollen, aber es klingt so, als ob es möglich sein sollte, und es klingt auch so, als ob Sie bereits auf der richtigen Spur sind.

Hier sind ein paar Links, die helfen könnten:

Rücktaste in Android deaktivieren

  MyActivity.Java =>
    @Override
    public void onBackPressed() {

       return;
    }

Wie kann ich das Zurückkehren zu bestimmten Aktivitäten deaktivieren?

  AndroidManifest.xml =>
<activity Android:name=".SplashActivity" Android:noHistory="true"/>
32
paulsm4

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 aus dem hinteren Stapel entfernt.

    Intent intent = new Intent(activityA.this, activityB.class);
    startActivity(intent);
    finish(); // Destroy activity A and not exist in Back stack

2. Deaktiviert die Aktion "Zurück" in Aktion B.

Es gibt zwei Möglichkeiten, ein Zurückgehen-Ereignis wie folgt zu verhindern:

1) Ansatz empfehlen

@Override
public void onBackPressed() {
}

2 on Überschreiben Sie die Methode onKeyDown

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

Ich hoffe, es ist nützlich, hängt aber immer noch von Ihren Situationen ab. 

13
Luna Kong

finish() gibt Ihnen eine Methode zum Schließen der aktuellen Anwendung, nicht der gesamten Anwendung. Und Sie sollten besser nicht nach Methoden suchen, um die Anwendung zu beenden. Kleiner Rat.

Haben Sie die Konjunktion von Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_NO_HISTORY ausprobiert? Denken Sie daran, diese Flags in Intent Startaktivität zu verwenden!

5
cadavre

Setzen Sie finish() gleich danach 

Intent i = new Intent(Summary1.this,MainActivity.class);
            startActivity(i);
finish();
3
Param Trivedi

Diese Methode funktioniert gut

Intent intent = new Intent(Profile.this, MainActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(intent);
2
pulak

paulsm4s Antwort ist die richtige. Wenn Sie in onBackPressed() gerade zurückkehren, wird die Zurück-Schaltfläche deaktiviert. Ich denke jedoch, dass ein besserer Ansatz angesichts Ihres Anwendungsfalls darin besteht, die Aktivitätslogik umzudrehen, d. H. Ihre Hauptaktivität als Hauptaktivität festzulegen, zu überprüfen, ob der Benutzer dort angemeldet ist. Wenn nicht, starten Sie die Anmeldeaktivität. Der Grund ist, dass die meisten Benutzer verwirrt werden, wenn Sie die Zurück-Schaltfläche in Ihrer Hauptaktivität überschreiben, wenn Sie zurück drücken und Ihre App nichts tut. 

2
dmon

Wenn Sie nicht zu allen Aktivitäten in Ihrer Anwendung zurückkehren möchten, können Sie verwenden 

Android:launchMode="singleTask"

Erfahren Sie hier mehr: http://developer.Android.com/guide/topics/manifest/activity-element.html

2
asok Buzz

Da es bereits viele gute Lösungsvorschläge gibt, versuche ich, eine weniger aussagekräftige Erklärung zu geben.

Wie kann ich überspringen zur vorherigen Aktivität zurückkehren?

Entfernen Sie die vorherige Aktivität aus dem Backstack. Einfach

Wie entferne ich die vorherige Aktivität aus dem Backstack?

Rufen Sie die Methode finish() auf

Der normale Fluss:

 enter image description here 
Alle Aktivitäten werden in einem Stapel gespeichert, der als Backstack bezeichnet wird.
Wenn Sie eine neue Aktivität starten (startActivity(...)), wird die neue Aktivität oben auf den Stapel verschoben, und wenn Sie die Zurück-Taste drücken, wird die Aktivität vom Stapel entfernt.
Ein wichtiger Punkt zu beachten ist, dass beim Drücken der Zurück-Taste die Methode finish(); intern aufgerufen wird. Dies ist das Standardverhalten der onBackPressed () -Methode.

Also, wenn Sie Aktivität B überspringen möchten?

dh A <--- C

Fügen Sie einfach die Methode finish(); nach Ihrer startActvity(...) in der Aktivität B hinzu

Intent i = new Intent(this, C.class);
startActivity(i);
finish();

 enter image description here 

1
Rohit Singh

Überschreiben Sie einfach die onKeyDown-Methode und prüfen Sie, ob die Zurück-Taste gedrückt wurde.

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) 
{
    if (keyCode == KeyEvent.KEYCODE_BACK) 
    {
        //Back buttons was pressed, do whatever logic you want
    }

    return false;
}
1
Machine Tribe

Stellen

finish();

Gleich nach ActivityStart, um die Aktivität zu stoppen und jede Rückkehr zu verhindern. Dann füge hinzu

onCreate(){
    getActionBar().setDisplayHomeAsUpEnabled(false);
    ...
}

Zu der Tätigkeit, die Sie beginnen. 

0
Brandon Dyer
@Override
public void onBackPressed() {
}

Wenn Sie onBackPressed() erstellen, entfernen Sie einfach super.onBackPressed();und das sollte funktionieren

0
hyperCoder