当返回键按下销毁activity之前返回数据给上个activity

背景:假如,我有两个activity类,一个是FirstActivity,一个是SecondActivity,现在我想在SecondActivity返回销毁之前把一个字符串传入上个activity,及FirstActivity。

1.在FirstActivity中,我们先用startActivityForResult()方法替代startActivity()方法并向方法中传入两个参数,一个是需要跳转的意图,另一个是请求码,请求码要求拥有唯一性。

val intent = Intent(this, SecondActivity::class.java)
startActivityForResult(intent, 1)

2.在SecondActivity中,我们仍要创建一个意图,不过这个意图没有任何动作,仅仅是用来传递数据的。把需要传递的字符串放入意图中,并调用setResult()方法返回数据。setResult()也需要传入两个参数,一个是返回处理结果(RESULT_OK或RESULT_CANCELED),一个是带有数据的意图。那么当返回键按下时:

override fun onBackPressed() {
        val intent = Intent()
        intent.putExtra("return_data", "bbbbb")
        setResult(Activity.RESULT_OK, intent)
        finish()
    }

3.最后就是在FirstActivity中根据第一步的请求码取得数据了,重写onActivityResult()方法:onActivityResult()三个参数中,requestCode是请求码,即第一步startActivityForResult()方法中传入的具有唯一性的请求码;esultCode是返回数据时传入的处理结果,RESULT_OK或RESULT_CANCELED;data就是携带着返回数据的意图了。当从SecondActivity返回时会把返回的字符串打印出来。

 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        when(requestCode){
            1 -> if(resultCode == Activity.RESULT_OK){
                val returnData = data?.getStringExtra("return_data")
                Log.d("FirstActivity", "returnData is $returnData")
            }
        }
    }

这里由于我们传递的是字符串,所以使用getStringExtra()方法来获取传
递的数据。如果传递的是整型数据,则使用getIntExtra()方法;如果传递的是布尔型数据,则使用getBooleanExtra()方法,以此类推。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值