Почему флаг 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);