Kotlin Composable: How to return data from a called activity

354 Views Asked by At

In my Jetpack Compose project I have two activities: ActivityA and ActivityB. I can pass data from ActivityA to ActivityB easily, as follows:

private fun showContinueDialog(indexSent: Int, messageSent: String){

    val intent = Intent(this, ActivityB::class.java)
    intent.putExtra("indexSent", indexSent)
    intent.putExtra("messageSent", messageSent)
    startForResult.launch(intent)
}

and:

private val startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult ->

        if (result.resultCode == Activity.RESULT_OK) {
            val intent = result.data

            if (intent != null) {
                //I expect to receive data here
            }
        }
    }

In ActivityB I have:

lateinit var intent2: Intent
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        .......
        intent2 = intent}

    @Composable
    fun ContinueClicked(indexReturn: Int) {
        intent2.putExtra("indexSent", indexReturn)
        setResult(Activity.RESULT_OK, intent2)
        startActivity(intent2)
        this.finish()
     }

When ActivityB closes, I expect to receive the result (an Integer) to appear in the ActivityResult block of ActivityA, but it does not happen. How can I return data from ActivityB to the ActivityResult block of ActivityA? Thanks!

1

There are 1 best solutions below

2
On

I figured it out:

In the second activity, add something like this where the activity terminates:

intent.putExtra("indexSent", 7788)
setResult(Activity.RESULT_OK, intent)
this.finish()