2013-10-11 1 views
3

Привет Я разрабатываю приложение для Android, в котором у меня есть поток активности, такой как A -> B -> C.Intent.FLAG_ACTIVITY_CLEAR_TOP не работает в Android

Так что мое намерение состоит в том, что как только B открывает деятельность С близкого расстояния А и В. Для этого я пытаюсь использовать 2 флаги: Intent.FLAG_ACTIVITY_CLEAR_TOP and Intent.FLAG_ACTIVITY_SINGLE_TOP

Но когда я нажимаю назад он показывает мне оба вида деятельности B А. Я начинаю деятельность как эта

Intent intent = new Intent(getApplicationContext(), MainActivity.class); 
       intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
       startActivity(intent); 

Я не знаю, почему он не работает? Могу ли я делать что-нибудь не так? Нужна помощь. Спасибо.

+0

Попробуйте это «намерение намерения = новое намерение (B.this, C.class) intent.setFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity (intent); ' – Raghunandan

+1

Он не работает так, как вы хотите, потому что флаг' CLEAR_TOP' очистит любую активность, которая находится вверху запускаемой деятельности. В вашем случае 'C' запускается, и ничего не стоит над' C', потому что нет существующего экземпляра 'C'. Пожалуйста, внимательно прочитайте документацию. – Varun

ответ

0

удалить Intent.FLAG_ACTIVITY_SINGLE_TOP

+0

Благодарим вас за помощь. Я тоже старался, но все еще не работал. Что-то еще :( – nilkash

+0

не использовать applicationcontext..use 'this' keyword ... – Manivannan

2

общественности статической окончательный ИНТ FLAG_ACTIVITY_CLEAR_TOP

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

Например, рассмотрите задачу, состоящую из действий: A, B, C, D. Если D вызывает startActivity() с намерением, который разрешает компонент активности B, то C и D будут завершены, а B получить данное намерение, в результате чего стек теперь равен: A, B.

В настоящее время исполняемый экземпляр действия B в приведенном выше примере будет либо получать новое намерение, которое вы начинаете здесь в его методе onNewIntent(), либо быть сам законченный и перезапущенный с новым намерением. Если он объявил свой режим запуска «множественным» (по умолчанию), и вы не установили FLAG_ACTIVITY_SINGLE_TOP в том же намерении, он будет завершен и заново создан; для всех других режимов запуска или если установлено значение FLAG_ACTIVITY_SINGLE_TOP, этот Intent будет доставлен в onNewIntent() текущего экземпляра.

Этот режим запуска также может быть использован для хорошего эффекта в сочетании с FLAG_ACTIVITY_NEW_TASK: если он используется для запуска корневой активности задачи, он приведет к запуску текущего исполняемого экземпляра этой задачи на передний план, а затем очистит его до корневое состояние. Это особенно полезно, например, при запуске операции из диспетчера уведомлений.

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

Для получения дополнительной информации смотрите here

+0

Благодарим вас за помощь. Я получил ваше мнение. Но я не понимаю, как решить мой сценарий. У вас есть какое-то решение? – nilkash

+0

Вы также можете реализовать это из своего файла AndroidManifest.xml, просто добавив android: noHistory = "true", для которого вы должны удалить из стека –

+0

Хорошо, я попробую это и сообщит вам, работает ли эта работа для меня или нет – nilkash

1

Я знаю его немного поздно, но для кого-то, кто ищет решение, призывая закончить() сделал трюк.

Intent intent = new Intent(getApplicationContext(), MainActivity.class); 
    startActivity(intent); 
    finish(); 
Смежные вопросы