2012-09-13 27 views
12

Meine Frage ist ein bisschen anders als diese Art von Frage. Ich muss meinen Aktivitätsstapel entfernen oder löschen und dann eine neue Aktivität starten. Ich glaube nicht, dass es ein clear_top Flag-Problem ist. Ich erkläre mit einem Beispiel:Klare Aktivität Stack und starten Sie neue Aktivität in Android

Mein Aktivitätsfluss:

Login > Home > Screen1 > screen2 .... 

I Login Aktivität beenden oder rufen Sie mit no_history Flagge. So sind meine Aktivitäten wie folgt aussehen

Login(finished)> Home [bottom of the stack now] > Screen1 > Screen2[top of the stack] 

Ich muss Sitzungsfehler behandeln. Wenn irgendein Sitzungsfehler in irgendeinem Punkt auftritt, muss ich zurück zu login Tätigkeit gehen. Aber denk daran, dass ich keine Login-Aktivität im Stack habe. Also wird clear_top nicht funktionieren.

Wenn irgendein Sitzungsfehler in Screen2 auftritt, dann muss ich den vollen Stapel löschen (screen2, screen1, home) und dann die Login-Aktivität starten. So dass nach dem Zurück-Knopf drücken Login-Aktivität schließt meine Apps.

Gibt es eine Möglichkeit den Aktivitätsstapel zu löschen?

Dank im Voraus

+0

Jetzt ist die Frage, willst du zur Login-Aktivität zurückkehren, auch wenn es nicht im Stapel ist, dann wyh du diese Aktivität beenden. Zweite Frage ist, in welchem ​​Fall Sie den Stapel löschen und zurückgeben möchten. Thirs ist, was Sie mit _So abklären möchten, dass nach dem Zurück-Knopf, der in der Login-Aktivität drückt, meine apps schließt. –

+0

Erstens: Ich habe eine Option zum Speichern der Sitzung. Wenn ich mich erfolgreich anmelde, öffnet es die HOME-Aktivität. Je nachdem, wenn wir die Taste aus der HOME-Aktivität drücken, sollte die App geschlossen werden. Nur Anmelde- oder Sitzungsfehler können die Anmeldeseite anzeigen. Zweitens: Denk an eine Website. Was passiert, wenn Ihre Sitzung abgelaufen ist? Es leitet Ihre Anmeldeseite um. Ich möchte genau dasselbe machen. Ich muss alle meine Aktivitäten schließen, die Anmeldeberechtigung für die Sitzung benötigen. – shantanu

Antwort

19

verwenden

Intent i = new Intent(yourScreen.this,Home.class); 
     i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     i.putExtra("EXIT", true); 
     startActivity(i); 

und in der onCreate der Heim-Klasse, prüfe dies,

if (getIntent().getBooleanExtra("EXIT", false)) 
    { 
     Intent i = new Intent(Home.this,Login.class); 
     startActivity(i); 
     finish(); 
    } 

was dies im Wesentlichen tun, ist kein Egal bei welcher Aktivität Sie sind, können Sie den Home-Bildschirm mit der klaren oberen Flagge aufrufen. Auf dem Startbildschirm gibt es eine Prüfbedingung in der onCreate-Methode, die hilft, den Stapel zu löschen und Sie zum Anmeldebildschirm zu bringen. Wenn Sie jetzt auf dem Anmeldebildschirm drücken, verlassen Sie die App, wenn der Stapel gelöscht wird ..

Lassen Sie mich wissen, wenn das Problem weiterhin besteht nach wie vor ...

+1

Mein Freund, hat meine Antwort Ihre Anfrage gelöst? –

+0

Tolle Tricks. Zuerst dachte ich, es wird Flimmern erzeugen. Aber nach dem Test funktioniert es großartig. Danke – shantanu

+3

Froh, dass es dir geholfen hat ... Gut, Indianer zu treffen. –

0

Verwenden onActivityResult() Aktivitäten in diesem Szenario zu verwalten.

2

Try this,

Beenden Sie Ihre aktuelle Aktivität

 YourCurrentActivity.this.finish(); 
    Intent intent1 = new Intent(YourCurrentActivity.this,LoginActivity.class); 
    intent1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(intent1); 

Es wird sogar Ihre Tätigkeit arbeiten, ist in dem Stapel nicht.

Ich hoffe, es hilft.

+0

funktioniert nicht in diesem Fluss. A (Ende) -> B -> C (Abmelden) -> A. Das Drücken von A wird immer noch zu B zurückgehen. – topwik

8

Es ist ein bisschen alte Frage, aber vielleicht wird jemand anderes stolpern darauf während der Suche nach Antwort auf ähnliche Problem.

Sie sollen Anmeldung Aktivität mit Fahnen beginnen: Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK - Flagge NEW_TASK ein wenig verwirrend Namen haben kann, aber es wird tatsächlich neue Aufgabe erstellen, nur, wenn es nicht vorhanden ist (sonst aktuelles Task verwendet wird) - und CLEAR_TASK wird Löschen Sie es von allen vorherigen Aktivitäten.

Verwandte Themen