场景:
用户进入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 对数据处理。
}
}
}
至此完成了数据传输。