Как управлять стеком активности? - PullRequest
10 голосов
/ 16 июня 2011

Когда мой стек находится в этой ситуации:

A->B->C

если я запускаю D активность, я хочу, чтобы стек активности стал:

A->D

Обратите внимание, что действие C является диалоговым окном.

Ответы [ 6 ]

4 голосов
/ 16 июня 2011

вот шаги, которые сделают необходимое:

  • из действия C запустите действие A с логическим значением fromActivityC, связанным с намерением и установленным флагом FLAG_ACTIVITY_CLEAR_TOP.
  • Теперь при создании операции Сначала проверьте для этого логического «fromActivityC» и, если он присутствует, запустите действие D, иначе нормальный поток продолжается.

    // following code can be used to get the boolean in the oncreate
    boolean entrypoint=this.getIntent().getExtras().getBoolean("fromActivityC");
    

Обходной путь, но надеюсь, что это поможет

2 голосов
/ 16 июня 2011

Существует несколько способов удалить действие из стека или предотвратить его сложение:

Чтобы удалить свое действие из стека, просто вызовите finish(), см. здесь .

Вы также можете реализовать в своем манифесте свойство: android: noHistory = "true", которое предотвращает штабелирование действия.

См. Этот вопрос более подробно: Удаление действияиз стека истории

1 голос
/ 16 июня 2011

Вы можете попробовать завершить ActivityB при запуске ActivityC и то же самое в ActivityC при запуске A.

Ваш код будет выглядеть так:

Intent i = new Intent(this.class.ActivityC);
startActivity(i);
ActivityB.finish();
1 голос
/ 16 июня 2011

Немного хакерский, но вы можете начать упражнение A, пока очищаете стек, а затем начать упражнение D.

Задание A может появиться на мгновение, прежде чем исчезнет, ​​хотя

0 голосов
/ 30 января 2014

вот лучшее решение, не зависящее от оценки содержания Intent в A: используйте флаг FLAG_ACTIVITY_TASK_ON_HOME

Вы также должны взглянуть на другие флаги Android Intent

0 голосов
/ 25 марта 2013

при обратном вызове C, передайте сообщение обратно A и начните свой D с завершения Acall, это завершит B и C (потому что C отделен от B).

...