2013-11-08 2 views
1

Я нахожусь в действии A, тогда я запускаю Activity B из A. Теперь я нахожусь в действии B и начинаю деятельность C из B. Начав деятельность C, я хочу удалить обе операции A и B. Я попробовал этот путь,Удалить верхнюю активность из стека android

Intent intent = new Intent(B.this, C.class); //I'm on Activity B, moving to C 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //this should remove the Activity A 
startActivity(intent); 
finish(); //Finishes activity B 

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

+0

вы можете разместить код о том, как вы двигаетесь от А до Б? –

ответ

5

Вы не можете сделать это таким образом. Вы должны finish() А при запуске C. Мой любимый способ сделать это состоит в следующем:

В B, если вы хотите, чтобы начать C, это сделать это:

Intent intent = new Intent(B.this, A.class); //Return to the root activity: A 
intent.putExtra("launchActivityC", true); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //this will clear the entire task stack and create a new instance of A 
startActivity(intent); 

Это очистит всю задачу стек (т.е. закончить деятельность B и A) и создать новый экземпляр деятельности А.

Теперь в onCreate() активности а сделать это (после вызова super.onCreate()):

if (getIntent().hasExtra("launchActivityC")) { 
    // User wants to launch C now and finish A 
    Intent intent = new Intent(this, C.class); 
    startActivity(intent); 
    finish(); 
    return; // Return immediately so we don't continue with the rest of the onCreate... 
} 

Что вы делаете, это использование вашей корневой активности A как своего рода «диспетчера».

+0

Его обходным решением, но шляпы выключены! :) –

0

добавьте intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);, чтобы удалить историю стека.

+1

Это не поможет. A все еще находится в стеке действий. Добавление дополнительного флага при запуске C означает, что C не закончится в истории. Вероятно, это не то, что хочет OP. –

1

Вы можете добавить флаг Intent.FLAG_ACTIVITY_CLEAR_TOP в намерение удалить верхнюю активность.

Пример кода приведен ниже.

Intent intent = new Intent(getApplicationContext(), Activity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent); 
+2

обязательно прочтите мой вопрос. Ваш ответ выглядит таким же! –

+1

Этот ответ неправильный. –

0

Попробуйте это,

Intent i = new Intent(activityContext, ActivityName.class); 
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(i); 
+0

Это не сработает, если только задача Activity A и активность C не совпадают. По умолчанию они одинаковы. Если бы это действительно сработало, у пользователя закончились бы две задачи, одна из которых содержала бы A и одну, содержащую C, чтобы клавиша BACK все равно взяла пользователя с C на A. Не только это, если пользователь нажал HOME, он увидит 2 задания в приложении. Это беспорядок, а не правильный подход. –

0

Добавьте этот флаг перед началом вашей новой деятельности

intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP) 

Это очистит активность от вершины стека

Смежные вопросы