Завершающая деятельность от другого вида деятельности

Скажем, у меня есть 3 действия A, B и C. A ведет к B, что приводит к C. Я хотел бы иметь возможность двигаться вперед и назад между A и B, но я хочу закончить как A, так и B, когда C получает начал. Я понимаю, как закрыть B при запуске C с помощью намерения, но как я также закрываю A при запуске C?

Ответ 1

Используйте этот флаг, когда вы открываете C-активность.

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

Это очистит все действия поверх C.

Ответ 2

Так как A является вашим корневым (начальным) действием, рассмотрите возможность использования A в качестве диспетчера. Когда вы хотите запустить C и завершить все другие действия до (ниже), сделайте следующее:

// Launch ActivityA (our dispatcher)
Intent intent = new Intent(this, ActivityA.class);
// Setting CLEAR_TOP ensures that all other activities on top of ActivityA will be finished
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// Add an extra telling ActivityA that it should launch ActivityC
intent.putExtra("startActivityC", true);
startActivity(intent);

в ActivityA.onCreate() выполните следующее:

super.onCreate();
Intent intent = getIntent();
if (intent.hasExtra("startActivityC")) {
    // Need to start ActivityC from here
    startActivity(new Intent(this, ActivityC.class));
    // Finish this activity so C is the only one in the task
    finish();
    // Return so no further code gets executed in onCreate()
    return;
}

Идея здесь заключается в том, что вы запускаете ActivityA (ваш диспетчер) с помощью FLAG_ACTIVITY_CLEAR_TOP, чтобы он был единственным действием в задаче, и вы сообщаете, какую деятельность вы хотите запустить. Затем он начнет эту деятельность и завершит сам. Это оставит вас только с ActivityC в стеке.