背景:假如,我有两个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()方法,以此类推。