Android 使用intent传递返回值:startActivityForResult()与onActivityResult()与setResult()参数分析,activity带参数的返回

在一个父Activity通过intent跳转至多个不同子Activity上去,当子模块的代码执行完毕后再次返回父页面,将子activity中得到的数据显示在主界面/完成的数据交给父Activity处理。这种带数据的intent跳转需要使用activity的onActivityResult()方法。

(1)startActivityForResult(Intent intent, int requestCode);

   第一个参数:一个Intent对象,用于携带将跳转至下一个界面中使用的数据,使用putExtra(A,B)方法,此处存储的数据类型特别多,基本类型全部支持。

   第二个参数:如果> = 0,当Activity结束时requestCode将归还在onActivityResult()中。以便确定返回的数据是从哪个Activity中返回,用来标识目标activity。

    因此,如果想要标识返回值是从哪个页面返回的,就要给每个页面的requestCode设置为不同的值;

(2)onActivityResult(int requestCode, int resultCode, Intent data)

  第一个参数:这个整数requestCode用于与startActivityForResult中的requestCode中值进行比较判断,是以便确认返回的数据是从哪个Activity返回的。

  第二个参数:这整数resultCode是由子Activity通过其setResult()方法返回。用于标识从requestCode所标识的页面返回的数据的返回值;

  第三个参数:一个Intent对象,带有返回的数据。可以通过data.getXxxExtra( );方法来获取指定数据类型的数据;

      一个页面可能有不同的返回值,通过resultCode区分页面的返回值,类似于请求url可以获取到不同的返回值;而requestCode则表示确实是从你请求的页面返回的结果;

      在判断时,可根据实际需求进行判断,可以先判断resultCode,也可以先判断requestCode

(3)setResult(int resultCode, Intent data)

  在intent跳转的目的地界面调用这个方法把Activity想要返回的数据返回到主Activity,即子activity页面

  第一个参数:当Activity结束时resultCode将归还在onActivityResult()中,用于双方协定返回码;

  第二个参数:一个Intent对象,返回给主Activity的数据。在intent对象携带了要返回的数据,使用putExtra( )方法。即该resultCode所携带的数据;

注意:

1. 一个页面最多只能有一个onActivityResult(),因为这个是拿到结果的地方;根据不同页面(requestCode )返回的不同结果(resultCode)来获取想要的结果;

2. 一个页面可以有多个startActivityForResult(), 因为可以从一个页面的不同组件跳转至不同的页面;startActivityForResult()实际就是启动intent跳转,因此不需要另外使用别的跳转;

3. 一个页面最多可以有多个setResult(), 因为这个是返回码和返回值,可以有多个返回码和返回值;该页面的intent跳转不需要传入要返回到哪个页面;

4.  setResult()后面需要调用finish()结束当前的activity;

原文地址:https://www.cnblogs.com/leavescy/p/8431070.html