Activity之间传值的方法-startActivityForResult

场景:

用户进入app后停留在主界面,点击某个按钮跳转到设置界面,用户在设置界面的操作,需要反馈到主界面。


举例:

用户在主界面有1000游戏币,跳转到购买页,花费10元人民币购买2000游戏币,再自动跳回主界面,并将主界面的游戏币改为3000。


方法:

A界面增加两个方法:

startActivityForResult(Intent i, int requestCode);

onActivityResult(int requestCode, int resultCode, Intent i);


B界面使用方法:

setResult(int resultCode, Intent i)


详解:

1、startActivityForResult方法,与startActivity类似。

不同点为:startActivity仅仅跳转目标界面,而startActivityForResult跳转的界面,如果调用了finish(),还会自动跳转回来。

2、onActivityResult 回调函数,接受返回值,类似callback函数

3、setResult 在目标界面设置参数,方便回调函数使用。


调用流程:

1、主界面A里面启动购买界面B,也就是在A里面调用startActivityForResult

2、B界面中完成购买后,使用setResult将2000的结果保存,该结果会随着B调用finish自动返回给A

3、A界面onActivityResult方法会在B调用finish时被自动回调,接收B里面的参数,然后进行数据操作。

3.1  该方法无差别接收所有使用startActivityForResult启动的界面finish时返回的值。通过参数区分每个不同的startActivityForResult,下面介绍。


参数解释:

1、A界面调用startActivityForResult时有两个参数。一个是Intent,也就是被调用的B。另一个requestCode,是唯一码,标志本次调用的。正整数即可。

2、B界面调用setResult时,也有两个参数。第一个resultCode是调用结果,标志本次操作结果。另一个是Intent,存储需传输的数据。

3、A界面的onActivityResult方法,3个参数。第一个是标志码requestCode判断是哪次调用,第二个resultCode是调用结果,标志B中的操作结果是否成功,第三个Intent是B传过来的参数。


示例:

A:MainActivity      B:BuyActivity

A中.

startActivityForResult(new Intent(BuyActity.class), 4);
 // 第一个参数代表要跳转B,第二个参数表名本次操作的代号是4

B中

xxxx 买完2000游戏币。
Intent i = new Intent();
i.putExtra("money", 2000);
setResult(Activity.RESULT_OK, i);// 第一个参数是常量,标志本次结果成功。第二个参数i存储的本次购买的数量
finish();


A中

	onActivityResult(int requestCode, int resultCode, Intent i){
		if(requestCode == 4){ // 对应启动时那个代号4
			if(resultCode == Activity.RESULT_OK){ // 对应B里面的标志为成功
				Bundle b = i.getExtra(); // 拿到B中存储的数据
				xxx 对数据处理。
			}
		}
	}


至此完成了数据传输。


你可能感兴趣的:(cyou)