Чтобы удалить IntroActivity
из стека после успешного входа в систему, я бы сделал это:
Предполагая, что LoginActivity
также должен быть завершен (удален из стека) при успешном входе в систему, вы можете позвонить startActivity()
, чтобы вернуться к IntroActivity
и добавить «дополнительный» к Intent
, сообщающему IntroActivity
: начать ContainerActivity
и закончить сам. Сделайте это:
in LoginActivity
:
Intent intent = new Intent(this, IntroActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra("startContainerActivity", true);
startActivity(intent);
finish();
in IntroActivity.onNewIntent()
:
if (intent.hasExtra("startContainerActivity")) {
Intent launchIntent = new Intent(this, ContainerActivity.class);
startActivity(launchIntent);
finish();
}
IntroActivity
запустит ContainerActivity
и завершит работу, оставив стек: MainActivity->ContainerActivity
.
Чтобы вернуться к MainActivity
из любого другого Activity
, вам просто нужно переопределить onBackPressed()
и вернуться к MainActivity
.
@Override
public void onBackPressed() {
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
finish();
}
Когда вы указываете флаги CLEAR_TOP
и SINGLE_TOP
, это говорит Android об удалении всех действий над целью Activity
и повторном использовании цели Activity
(т. Е. Не создает новый экземпляр цели Activity
). В этом случае onNewIntent()
вызывается на существующем экземпляре Activity
.