2014-01-28 4 views
0

Предположив У меня есть активность стека, как это (сверху вниз):Отделочные деятельности новой активности начинается

D - C - B - A

Так активность D находится на вершине стека и в настоящее время выполняется (отображается).

Теперь от DI активности хочет вызвать активность B (во второй позиции в стеке), так:

Intent intent = new Intent(this, ActivityB.class); 
startActivity(intent); 

После этой операции, новая конфигурация стеки, теперь должна быть:

B - D - C - B - A

Но что я действительно хочу это следующая конфигурация стека:

B - A

Как я могу получить этот результат? Есть ли какой-либо FLAG, который я могу использовать для этого?

Подведение итогов. Я хочу, чтобы, когда я начинаю деятельность B (из D), оба D и C автоматически завершаются.

+0

Мое приложение позволяет также вернуться с D на C, поэтому, если я последую вашему предложению, я не могу вернуться к C – GVillani82

ответ

2

Это то, что FLAG_ACTIVITY_CLEAR_TOP для.

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP

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

+0

Я собирался написать это решение. Я только что нашел его :) – GVillani82

+0

Я знаю, как это раздражает :) Sry. – kupsef

0

вы можете использовать startactivity результата при запуске д и отправить пристальное значение как «ActivitStarted», «D» результат деятельность

onresult

чека отправить Д если отправить затем снова начать с результатом деятельности проверки отправить C, если с посылом затем снова начать б результата деятельности проверки отправить б, если б отправить затем снова начать

0

вызова «C» с «D», с умыслом переменным как

Intent intent = new Intent(this, ActivityC.class); 
intent.putExtra("BYPASS_ME", true); 
startActivity(intent); 

В ActivityC.java получите значение намерения, если его истина завершает действие. Теперь C будет удален из стека.

0

вам нужно использовать «startActivityForResult», а затем, когда вы хотите, чтобы «вызвать» деятельность B вы на самом деле «закончить» деятельность D. Оттуда, сделать проверку в деятельности C, чтобы увидеть то, что вам необходимо сделать следующее:

How to manage `startActivityForResult` on Android?

Вы должны обратить внимание на ту часть, где вы установили данные в своих намерениях - это скажет вам, следует ли завершить работу С или что-то еще.

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

+0

Это, вероятно, лучшее решение, хотя оно будет работать, только если 'Активность C' является единственным способ начать «Активность D». Если у вас есть еще один «Activity X», который запускает «Activity D», вам также придется реализовать ту же логику. –

+0

true. Я отвечал в контексте вопроса (был указан порядок стека) – Jim

0

К сожалению, для выполнения вашего требования нет флага.

Как Tober сказал:

Что вы можете сделать, это просто закончить С перед D и делать то же самое при вызове следующего.

На мой взгляд, первый ответ такой же, как и для tober, как для финиша в C и D, но теперь в A, когда вы проходите на стадии onPause.

0

Как об этом

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