2014-01-20 3 views
0

У меня есть последовательность нескольких действий, и в какой-то момент я хочу перейти в другой раздел своего приложения, и я не хочу иметь предыдущие действия в стеке. Это как: Actvity A -> Деятельность A1 -> Деятельность A2 -> Деятельность A3 -> Деятельность BOnActivityResult не вызывается после завершения

Когда я начинаю деятельность B, я хочу закрыть все действия As.

Самый простой способ сделать это Я думаю, что это setResult, а затем finish Последнее действие и предыдущие действия для поиска результата и закрытия операции, а также после передачи тех же данных.

Так что я setResult затем finish A3 перед началом Б.

Проблема в том, что A3 закончена, но onActivityResult не называется на А2, пока я не закрою B так, что A2 должна быть возобновлена.

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

Затем я заблокирован. Я не знаю, что я должен делать, или если есть другой способ сразу закрыть мультипликационные действия.

+0

Вы не можете закончить() действие, когда вы намерены использовать следующий? – Nfear

+0

закрыть A2 без запуска B. Начать B, когда onActivityResult из A скопирован – Blackbelt

+0

Вы начинаете деятельность с: "startActivityForResult()"? – VincentLamoute

ответ

3

Вы должны начала деятельности всех А с startActivityForResult(). Когда вы начинаете деятельность B, setResult in A3 and finish A3. Как только A3 будет завершен, будет вызываться A2 onActivityResult(), setResult и завершить его. Как только A2 закончится, вызывается A1 onActivityResult. Теперь сделайте все, что хотите, с результатом закрытия Activity.

Или вы можете запустить B из A после завершения всех дочерних действий A.

+0

Это point, если я запускаю новую активность в одно и то же время, A2 не вызывается немедленно. –

+0

обновил ответ. –

+0

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

1

Только одно действие может быть активным одновременно, поэтому, когда вы заканчиваете A3, и запуск B, который теперь активен для A2, не может быть вызван.

Решение этого вопроса будет переведено на B в ActivityAonActivityResult.

Завершить все другие действия и в первом действии onActivityResult Запустить B и закончить.

, если вы используете API 11 и выше, вы можете просто установить флаг как:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK 
       | Intent.FLAG_ACTIVITY_CLEAR_TASK); 

при запуске ActivityB. это завершит все действия перед ActivityB.

+0

Да, я знаю, API 8 для меня :( –

+1

, так что просто запустите B в первом действии. –

-2

Предположим, вы начали деятельность A1 и от А1 вы начали А2 теперь, когда вы хотите начать A3 от A2 тогда,

finish(); 
setResult(0); 

тогда вертеп A1 будет дозвонились там проверить

если ResultCode == 0 отделка() затем начать A3

+0

Что бы закрыть A2 сразу? –

+0

да A2 будет близко и в onActivityresult A1 вы должны закрыть финиш A1 и начать A3 – Amit

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