既然可以传递数据给下一个活动,那么能不能返回数据给上一个活动啦?答案是坑定的。不过不同的是,返回上一个活动只需要按一下Back键就可以了,并没有一个用于启动活动的Intent来传递数据。通过查看文档你会发现,Activity中还有一个startActivityForResult();方法来启动活动的,但是这个个方法期望在活动销毁的时候能够返回一个和结果给上一个活动。毫无疑问,这就是我们所需要的。
startActivityForResult()方法接受两个参数,第一个参数耗时Intent,第二个参数是请求码,用于在之后的回调中判断数据的来源,我们还是来实战一下,修改FristActivity中按钮的点击事件,代码如下所示:
FristActivity 中的代码
这里我们使用了startActivityForResult()方法来启动Main_two,请求码只要是一个唯一值就可以了,这里传入了1,。接下来我们在Main_two中给按钮注册点击事件,并在点击事件中添加返回数据的逻辑,代码如下:
Main_two Activity中的代码
可以看到,我们还是构建了一个Intent,只不过这个intent仅仅使用与传递数据而已,他没有指定任何的“意图”。紧接着把要传递的数据放在Intent中然后调用setRestult()方法中接受的两个参数,第一个参数用于向上一个活动返回处理结果们一般只是使用RESULT_OKhe RESULT_CANCLED这两个值,第二个参数吧带有数据的Intent传递过去,然后调用了finish()方法来销毁当前活动。
由于我们使用startActivityForResult()来启动Main_two (Activity活动),在Main_two被销毁之后会回调上一个活动的onActivityResult()方法,因此我们需要在FristActivity中重写这个方法来的到返回值的数据,如下所示:
//在销毁Main_two之后,在FristActivity中重写的方法,用于接收Main_two返回回来的数据
onActivityResult()方法有三个参数:
第一个参数 requestCode:
即我们在启动活动时传入的请求码。
第二个参数resultCode:
即我们返回数据是处理的结果。
第三个参数data:
及携带这返回数据的Intent。
由于在一个活动中有startActivityForResult()来启动很多不同的活动,每一个活动返回的数据都会调用到ActivityResult()这个方法中的,因此我们首先要做到的就是先检查requestCode的值来判断数据的来源。确定数据是从Main_two返回的之后,我们再通过resultCode的值来判断处理结果是否成功。最后从data中取值并打印出来,这样就完成了向上一个活动返回数据的工作。
-------------------------------------------------
这个时候你可能会问,如果用户在Main_two中并不是通过点击按钮,而是通过按下Back键回到FristActivity,这样数据就没办法返回了吗?没错。不过这种情况还是很好处理的,我们可以通过Mian_two中重写onBackPressed()方法来解决这个问题,代码如下:
Mian_two(Activity)
这样的话,当用户按下Back键,就会去执行onBackPressed()方法中的代码,我们在这里添加返回数据的逻辑就行了。
网友评论