Подтвердить что ты не робот

Почему FLAG_ACTIVITY_CLEAR_TOP не работает?

Как говорится в заголовке: Почему intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) или intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) не будут работать?

У меня есть 3 действия, скажем, A, B и C.

Когда я пытаюсь запустить Activity A с C с кодом:

Intent i = new Intent(this, A.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);

Он просто запускает Activity A, но не очищает верхнюю часть.! -_-

Я также попытался использовать setFlags().

Я прочитал разные вопросы по поводу этой проблемы, но я не смог найти правильный ответ. > _ & Л;

Кто-нибудь, пожалуйста, помогите!

Edit

Код для onBackPressed() в действии "A" по запросу @codeMagic.

@Override
public void onBackPressed(){
    if(wvLogin.canGoBack())
        wvLogin.goBack();
    else
        super.onBackPressed();
}
4b9b3361

Ответ 1

Из документации для FLAG_ACTIVITY_CLEAR_TOP:

Если установлено, и запущенная деятельность уже запущена в текущую задачу, вместо этого вместо запуска нового экземпляра этого деятельность, все другие мероприятия поверх нее будут закрыты и это намерение будет передано (сейчас сверху) старой деятельности как новое намерение.

Как вы добавили в свой комментарий, действие A было закончено до вызова B, поэтому эта ситуация не применяется. Вместо этого будет запущен новый экземпляр активности A.

Как я вижу, у вас есть два варианта:

1) Используйте флаги Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK. Это запустит активность A как корень стека. Он работает, но любые другие действия в стеке будут потеряны. Предполагая, что A было первым действием (или, по крайней мере, что вас не интересуют какие-либо предыдущие действия в стеке задач), это не имеет значения. Примечание. Для CLEAR_TASK требуется уровень API 11.

2) Еще одно возможное решение (в случае, если предыдущее предположение неверно) заключалось бы в том, чтобы не использовать флаги намерения вообще:

  • B запускает C с startActivityForResult().
  • Вместо вызова A, C заканчивается, установив результат для B, указывающий, что A должен быть запущен.
  • В B.afterActivityResult() завершите B и запустите A.

Ответ 2

Вам не хватает флага Intent.FLAG_ACTIVITY_SINGLE_TOP

Попробуйте следующее:

Intent i = new Intent(this, A.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i);

Ответ 3

Вы использовали различный смысл: используйте тот, который вы инициализировали:

  Intent i = new Intent(this, A.class);
  intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); \\WRONG;;
  startActivity(i);

Решение:

i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); \\RIGHT;;

Вы можете либо поставить noHistory true для Activity A в манифесте

android:noHistory=true