Скажем, у меня есть 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 в стеке.