423 Stimmen

Beende alle vorherigen Aktivitäten

Meine Anwendung hat die folgenden Ablaufbilder:

Home->screen 1->screen 2->screen 3->screen 4->screen 5

Jetzt habe ich eine gemeinsame log out Schaltfläche in jedem Bildschirm

( Home/ screen 1 / screen 2 /screen 3/ screen 4 / screen 5 )

Ich möchte, dass, wenn der Benutzer auf die Schaltfläche "Abmelden" (von einem beliebigen Bildschirm) klickt, alle Bildschirme beendet werden und ein neuer Bildschirm Log in wird geöffnet.

Ich habe fast alle ausprobiert FLAG_ACTIVITY um dies zu erreichen. Ich gehe auch durch einige Antworten in Stackoverflow, aber nicht in der Lage, das Problem zu lösen. Meine Anwendung ist auf Android 1.6 so nicht in der Lage zu verwenden FLAG_ACTIVITY_CLEAR_TASK

Gibt es eine Möglichkeit, das Problem zu lösen?

11voto

Djek-Grif Punkte 1211

In meinem Fall verwende ich finishAffinity() Funktion in der letzten Aktivität wie:

finishAffinity()
startHomeActivity()

Ich hoffe, es wird nützlich sein.

10voto

Andy Punkte 6629

Eine Lösung, die ich für dieses Problem implementiert habe (ich glaube, ich habe sie irgendwo auf Stack Overflow gefunden, aber ich erinnere mich nicht mehr daran, also vielen Dank an denjenigen, der das in erster Linie getan hat):

Tun Sie dies bei jeder Ihrer Aktivitäten:

// Clear your session, remove preferences, etc.
Intent intent  = new Intent(getBaseContext(), LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

Überschreiben Sie dann in Ihrer LoginActivity onKeyDown:

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

10voto

Amrit Punkte 329

Für die Abmeldeschaltfläche auf dem letzten Bildschirm der Anwendung verwenden Sie diesen Code auf dem Abmeldeschaltflächen-Hörer, um alle offenen vorherigen Aktivitäten zu beenden, und Ihr Problem ist gelöst.

{
Intent intent = new Intent(this, loginScreen.class);
ntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}

8voto

Hitesh Kushwah Punkte 1290

Statt mit finish() verwenden Sie einfach finishAffinity();

8voto

Prashant Kumar Punkte 421
    Intent i1=new Intent(getApplicationContext(),StartUp_Page.class);
i1.setAction(Intent.ACTION_MAIN);
i1.addCategory(Intent.CATEGORY_HOME);
i1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
i1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i1);
finish();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X