Ваше приложение запускает ItemSelectionActivity
, используя startActivityForResult()
.Ваше приложение получит обратный вызов onActivityResult()
после завершения ItemSelectionActivity
.Он получит результаты, которые ItemSelectionActivity
устанавливает при вызове setResult()
.
Если ItemSelectionActivity
необходимо запустить другие действия, прежде чем он сможет получить результаты для отправки обратно в ваше приложение, вы можете сделать это внесколько возможных способов:
- Использование
FLAG_ACTIVITY_FORWARD_RESULT
Когда ItemSelectionActivity
запускает еще один Activity
, он должен установить флаг Intent.FLAG_ACTIVITY_FORWARD_RESULT
в Intent
и вызовите startActvity()
( НЕ звоните startActivityForResult()
. Запускаемый Activity
должен затем вызвать setResult()
с результатами, и эти данные будут переданы обратноВаше приложение. Вы в основном «пересылаете» запрос на результат от одного Activity
к следующему. Так как вам, кажется, нужно выполнить несколько действий, прежде чем вы получите результат, вы можете продолжать переадресовывать ответственность с одного Activity
к следующему Activity
. Последнему в цепочке следует вызвать setResult()
, и эти результаты будут переданы обратно в ваше приложение в onActivityResult()
.
Цепочка startActivityForResult()
вызовов: Когда ItemSelectionActivity
запускает еще один Activity
, он должен вызвать startActvityForResult()
.Activity
, который запускается, должен затем вызвать setResult()
с результатами, и эти данные будут переданы обратно в ItemSelefctionActivity
в onActivityResult()
.Затем ItemSelectionActivity
должен сам вызвать setResult()
с данными и finish()
.Результаты будут переданы обратно в ваше приложение.Поскольку вам, кажется, нужно выполнить несколько действий, прежде чем вы получите результат, вы можете продолжить цепочку этих вызовов, чтобы каждый Activity
запускал следующий Activity
, используя starActivityForResult()
и вызываемый Activity needs to pass the results back using
setResult () `.
Пусть LastActivity
доставит результат ItemSelectionActivity
: Это решение, которое вы уже пытались внедрить.LastActivity
возвращает результат непосредственно в ItemSelectionActivity
.Однако ваша реализация не работает. НЕ ИСПОЛЬЗУЙТЕ TaskStackBuilder
для достижения этой цели! TaskStackBuilder
имеет много побочных эффектов, которые разрушают стек Activity
внутри задачи.Вместо этого вы хотите сделать следующее:
val receiverActivityIntent = Intent(this@LastActivity, ReceiverActivity::class.java)
receiverActivityIntent.putExtra("end", true)
// add the results to the Intent
receiverActivityIntent.putExtra("results", results)
// Set the CLEAR_TOP and SINGLE_TOP flags (if necessary) to remove any
// activities that are on the stack between ReceiverActivity and LastActivity
receiverActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_SINGLE_TOP)
startActivity(receiverActivityIntent)
// Calling finish() here isn't necessary if you set the Intent flags
finish()
ПРИМЕЧАНИЕ. Мой синтаксис Kotlin может быть не на 100% правильным, но, надеюсь, вы поняли идею.
С этим решением результаты будутдоставить до ReceiverActivity
в onNewIntent()
.Вам нужно будет переопределить onNewIntent()
, получить результаты из переданного Intent
и затем вызвать setResult()
с результатами, чтобы передать их обратно в ваше приложение.