2016-05-16 1 views
1

In meinem Android-Anwendung annehmen, mehrere Aktivitäten beenden gibt es wenn mit Absicht ich zu anderen Aktivitäten gehen wie dieserWie spezifischen Aktivitäten nicht alle Aktivitäten

[Aktivität A] -> [Aktivität B] -> [Aktivität C] -> [Activity-D] -> [Aktivität N]

und jetzt, wenn auf der Aktivität N sind, wenn ich Taste gedrückt, dann will ich gehen zu Aktivität B und will Aktivität C und Aktivität D zerstören aber Aktivität A sollte nicht zerstören. Ich habe auch in verschiedenen Posts gesucht, aber ich habe nicht genau die selbe Lösung bekommen.

o jede Hilfe wird

+0

Wenn Sie zu einer anderen Aktivität gehen, beenden Sie diese Aktivität zum Beispiel, um Aktivität A und Aktivität B nicht zu beenden, dann Aktivität C und Aktivität D –

+0

@DaminiMehra Ich möchte nicht, dass Aktivität B und C durch Absicht beendet werden – user121190

+0

Warum möchten Sie nicht beenden? –

Antwort

4

In ActivityN, zu ActivityB Verwendung zurückzukehren dies:

Intent intent = new Intent(this, ActivityB.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
startActivity(intent); 

Mit der Flagge CLEAR_TOP wird alles beenden Aktivitäten im Stapel, die auf ActivityB sind. In dem von Ihnen angegebenen Beispiel werden ActivityN, ActivityD und ActivityC beendet. Mit dem Flag SINGLE_TOP wird sichergestellt, dass dies die Kontrolle an die vorhandene Instanz ActivityB zurückgibt (dh: es wird keine neue Instanz von ActivityB erstellt).

1

EDIT appriciated: Verwenden Sie startActivityForResult() anstelle von startActivity()

So je nach Ergebnis können Sie die behavour ändern.

Sagen Sie zum Beispiel Wenn Sie zu ActivityB gehen wollten, geben Sie einfach ein Flag im INTENT zurück. Wenn es in Aktivität D und C in onActivityResult() gefangen wird, beenden Sie sie und Sie werden schließlich auf B.

+0

Es gibt viele Ansichten in meiner Aktivität N und ich möchte nicht gehen Aktivität B mit Absicht gibt es viele Fälle wie, wenn ich zurück drücke ich will zur Aktivität D nicht B so in diesem Fall beenden Methode funktioniert nicht – user121190

+0

für mehr Details beziehen sich darauf: http://stackoverflow.com/a/5002392/6127411 –

+0

Bitte akzeptieren Sie die Antwort, wenn es geholfen hat .. !!! –

1

Versuchen Sie diesen Code: // Aktivität A

Intent i = new Intent(getApplicationContext,ActvityB.class); 
startActivity(i); 

// Aktivität B

Intent i = new Intent(getApplicationContext,ActvityC.class); 
startActivity(i); 

// Aktivität C

Intent i = new Intent(getApplicationContext,ActvityC.class); 
startActivity(i); 
finish(); 
// finish here actvity which you want to finish 

// diese zweite Art und Weise versuchen:

In Ihre erste Tätigkeit, wie diese Aktivität Objekt deklariert

public static Activity fa; 
onCreate() 
{ 
fa = this; 
} 

jetzt das Objekt in einer anderen Aktivität verwenden First-Aktivität wie diese zu beenden,

onCreate() 
{ 
FirstActivity.fa.finish(); 
} 
+0

Mit Zurück drücken ich möchte gehen vorherige Aktivität, von der absicht gefeuert wird, also möchte ich Aktivität B auf speziellen Fall gehen, deshalb möchte ich nicht Fertigmethode verwenden. – user121190

+0

versuche meine Antwort bearbeiten. –

+1

Dies ist eine schreckliche Lösung :-(Android bietet 'Intent' Flags, um genau das zu tun, was OP will. Ihre Lösung erzeugt Speicherlecks in der Anwendung, weil die in den statischen Variablen gespeicherten' Activity'-Instanzen niemals Garbage Collected sein können "Diese Lösung ist schwer zu verstehen und schwer zu warten. Es gibt keinen Grund für einen solchen Hack. –

1

in Ihrer Tätigkeit C gefällt diese

public static ActivityC instance = null; 
public class ActivityC extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     instance = this; 
    } 
} 

Und in Ihrer Aktivität D gefällt dieses

public static ActivityD instance = null; 
public class ActivityD extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     instance = this; 
    } 
} 

schließlich in Ihrem Bundesland N. So etwas wie diese

public class ActivityN extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Button yourButton= (Button) findViewById(R.id.yourButton); 
     yourButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       ActivityC.instance.finish(); 
       Activityd.instance.finish(); 
       finish(); 
      } 
     }); 
    } 
} 
+0

Ich werde nicht lieber ** Statik ** verwenden. –

+0

Manchmal verdrahtete Anforderung zwingt uns, statische zu tun @ Janki Gadhiya – Masum

+0

Diese Lösung ist ok, aber wenn wir 15-20 aktivitäten haben, müssen wir alle aktivitäten erstellen und zusammen fertig machen – user121190

1

mein Ansatz hier.

Von Activity A, starten Sie nicht einfach die Activity B, rufen Sie startActivityForResult() Methode. Tun Sie dies für alle nachfolgenden Anrufe.

Nun, wenn Sie die Taste aus Activity N drücken, stellen Sie den result für einen benutzerdefinierten Wert und rufen Sie die finish() Methode für Activity N. Jetzt sollten Sie die onActivityResult Methode auf Ihrem Activity D treffen. Jetzt können Sie überprüfen, ob das Ergebnis war, dass Sie den Knopf drücken. Abhängig von Ihrem Ergebnis, setzen Sie das Ergebnis fort und rufen Sie anschließend finish() auf jedem Activity.

Dies sollte technisch funktionieren.

-3

Try This Way

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