2016-07-24 21 views
0

in meiner Anwendung hat es Funktion, wo Sie weiter unten eine Struktur gehen kann , so dass ich wieder die gleiche Aktivität zu öffnen sein wird und es mit einem anderen Datenandroid FLAG_ACTIVITY_CLEAR_TOP tut den Stapel löschen whic die gleiche Aktivität

Beispiel:

MainActivity -> activity1 (1) -> activity1 (2) -> activity1 (3) 

I diese Struktur in einem Array gespeichert haben so dass, wenn i zu navigieren activity1(1) zurück durch die Absicht flag auf FLAG_ACTIVITY_CLEAR_TOP Einstellung es nicht klar activity1 (2), activity1 (3) von der Rückseite Stapel (it erscheint nach wie vor auf die Presse Zurück-Taste)

+0

Können Sie den Intent-Code für oben eingeben? – Shaishav

Antwort

0

Sie versuchen, zwei weitere Flaggen

Intent.FLAG_ACTIVITY_NEW_TASK 
Intent.FLAG_ACTIVITY_CLEAR_TASK 
+0

was ich versuche zu tun ist speichern die Absichten in einem Array und wenn ich zurück zu einer vorherigen Aktivität wollte ich das Flag zu löschen oben und starten Sie die Absicht, so dass alles nach dieser Aktivität erstellt wird aus dem Back-Stack entfernt werden, oder gibt es eine andere Möglichkeit, auf einen androiden (Aktivitäts-) Stack zuzugreifen –

0

1. ANSATZ 1

Wenn wir Ihr Ansatz zu folgen, können Sie erreichen, was Sie wollen, indem kann das Hinzufügen mit @ Antwort des shuvro auf diese Weise:

public class MainActivity extends AppCompatActivity { 

    private List<Intent> intents = new ArrayList<>(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Button button = (Button) findViewById(R.id.button); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent intent = new Intent(MainActivity.this, MainActivity.class); 
       intents.add(intent); 
       startActivity(intent); 
      } 
     }); 
    } 

    @Override 
    public void onBackPressed() { 
     if (!intents.isEmpty()) { 
      Intent intent = intents.get(0); 
      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
      startActivity(intent); 
     } 
    } 
} 

Und in der AndroidManifest.xml yo u sollte diese Eigenschaft auf Ihrer Aktivität hinzufügen:

android:launchMode="singleInstance" 

2. ANSATZ 2

Ich denke, dieser Ansatz ist ein Reiniger ein. Sie können für jeden Bildschirm eine Aktivität erstellen, die eine BaseActivity mit dem gemeinsamen Code erweitert. Wenn Sie also Activity1 öffnen (das ist der Stamm und sollte als singleInstance gestartet werden) und Activity2 würden Sie sie ohne Flags öffnen. Aber wenn Sie Activity3 öffnen müssen, sollten Sie die Flags hinzufügen.

Von MainActivity öffnen Activity1:

Intent intent = new Intent(MainActivity.this, Activity1.class); 
    startActivity(intent); 

Von Activity1 öffnen Activity2:

Intent intent = new Intent(Activity1.this, Activity2.class); 
startActivity(intent); 

Von Activity2 öffnen Aktivität3:

Intent intent = new Intent(Activity2.this, Activity3.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
startActivity(intent);