Почему флаг ACTIVITY CLEAR TOP не работает?

как говорится в названии, почему intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) или intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) не работает?

у меня есть 3 вида деятельности, скажем, A, B и C.

когда я пытаюсь запустить действие A из C с кодом:

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

он просто начинает действие A, но не очищает верхнюю часть.! - _ -

Я также попытался с помощью setFlags().

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

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

редактировать

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

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

3 ответов


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

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

как вы добавили в своем комментарии, действие A было закончено перед вызовом B, поэтому эта ситуация не применяется. Вместо этого будет запущен новый экземпляр activity 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.

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

  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 верным активности в манифесте

android:noHistory=true

вы пропускаете 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);