Android: очистить задний стек - PullRequest
304 голосов
/ 26 апреля 2011

В Android у меня есть некоторые действия, скажем, A, B, C.

В A я использую этот код для открытия B:

Intent intent = new Intent(this, B.class);
startActivity(intent);

В B я использую этокод для открытия C:

Intent intent = new Intent(this, C.class);
startActivity(intent);

Когда пользователь нажимает кнопку в C, я хочу вернуться к A и очистить задний стек (закройте оба B и C).Поэтому, когда пользователь нажимает кнопку «В», B и C не отображаются, я пытаюсь сделать следующее:

Intent intent = new Intent(this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent);

Но B и C все еще отображаются, если я нажимаю кнопку «Назад», когдаВернемся к занятию А. Как я могу избежать этого?

Ответы [ 35 ]

1 голос
/ 12 июля 2016

Вы можете использовать этот пример для вызова Activity A с Activity C

Intent loout = new Intent(context, LoginActivity.class); loout.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); context.startActivity(loout);

0 голосов
/ 28 февраля 2019

Пример Kotlin:

      val intent = Intent(this@LoginActivity, MainActivity::class.java)
      intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK
      startActivity(intent)
      finish()
0 голосов
/ 19 февраля 2019
 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
0 голосов
/ 26 апреля 2011

В дополнение к FLAG_ACTIVITY_CLEAR_TOP вы также можете попробовать добавить Intent.FLAG_ACTIVITY_SINGLE_TOP:

intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

0 голосов
/ 20 декабря 2012
Intent intent = new Intent(this, A.class);
startActivity(intent);
finish();
0 голосов
/ 12 марта 2018

Это сработало для меня с onBackPressed:

public void onBackPressed()
{
    Intent intent = new Intent(ImageUploadActivity.this, InputDataActivity.class);

    Intent myIntent = new Intent(this, ImageUploadActivity.class);
    myIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
   finish();
}
0 голосов
/ 28 января 2013

Данный код работает правильно. Я пробовал в образце жизненного цикла приложения.

У меня нет B и C в заднем стеке после начала действия A с флагом FLAG_ACTIVITY_CLEAR_TOP

0 голосов
/ 10 июня 2015

Добавить NO История флага в намерении.

В упражнении B запустите упражнение C, как показано ниже >>>>>>

Intent intent = new Intent(this, C.class);
intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NO_HISTORY); 
startActivity(intent);
finish();
0 голосов
/ 07 сентября 2017

Используйте метод setFlags (), чтобы очистить заднюю сторону, открыть все действия, закрыть и запустить yourActvity

Intent intent = new Intent(getApplicationContext(), yourActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
0 голосов
/ 31 октября 2014

я позвонил activity_name.this.finish() после начала нового намерения, и это сработало для меня.

I tried "FLAG_ACTIVITY_CLEAR_TOP" and "FLAG_ACTIVITY_NEW_TASK"

Но это не сработает для меня ... Я не предлагаю это решение для использования, но если установить флагне будет работать для вас, чем вы можете попробовать это .. Но все же я рекомендую не использовать его

...