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

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

2 ответа

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

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

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

Поскольку 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 в стеке.

Другие вопросы по тегам