Activity中的请求码与结果码在处理多个Activity之间的关系起到了关键的作用,让我们知道Activity之间是“怎么去”与“怎么回”的
一、请求码:
试想下面一个小功能:
在左侧,红、绿两个按钮,在两个按钮下,分别有连个区域:红色区域、绿色区域,当点击红色或者绿色按钮后,都会跳转到另一个Activity,这个Activity可以再A处输入文本,之后点击按钮B就会返回到左侧的Activity,并且,在右侧输入的文本内容会出现在相应的区域,也就是说,点击红色后输入文本,文本就会出现在红色区域,反之亦然。
在这个需求中,红绿两个按钮访问的是一个Activity,这样设计,可以重复利用代码,因为连个按钮所执行的动作和动作响应后的结果都是一样的。
如果用请求码处理该问题就十分的简单,具体代码如下:
MainActivity.java
Intent intent = new Intent(MainActivity.this, OtherActivity.class);
<pre name="code" class="java">//红按钮点击事件
startActivityForResult(intent, 1);//绿按钮点击事件startActivityForResult(intent, 2);
省略代码.....
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
String reStri = "";
if(requestCode == 1){
reStri = "红按钮";
}
else{
reStri = "绿按钮";
}
Toast.makeText(this, reStri, Toast.LENGTH_SHORT).show();
super.onActivityResult(requestCode, resultCode, data);
}
这样我们就可以轻易地知道怎么从第一个页面跳转到第二个页面的了。
二、结果码:
同样试想下面的一个功能:
中间的页面,有一个TIME按钮,当点击后,会计算出当前系统时间的秒数,当秒数是偶数,页面跳转到左面有红色按钮的页面;当秒数是奇数,页面跳转到右面有绿色按钮的页面。跳转完,按当前页面的按钮(红色或绿色),页面会跳转回中间的页面,并且,A区域会显示之前点击过按钮的颜色。
同样,在中间Activity中,我们还是继承
onActivityResult(int requestCode, int resultCode, Intent data)
MainActivity.java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
String reStri = "";
if(resultCode == 1){
reStri = "红色";
}
else{
reStri = "绿色";
}
Toast.makeText(this, reStri, Toast.LENGTH_SHORT).show();
super.onActivityResult(requestCode, resultCode, data);
}
leftActivity.java
leftActivity.this.setResult(1, intent);
leftActivity.this.finish();
rightActivity.this.setResult(2, intent);
rifhtActivity.this.finish();
这样,就可以按照需求实现功能了!