startActivityForResult()、onActivityResult()和setResult()使用
2014-09-22 15:43
369 查看
startActivityForResult(Intent intent, int requestCode)
onActivityResult(int requestCode, int resultCode, Intent data)
setResult(int resultCode, Intent data)
这三个函数,尤其要注意他们的参数!
现在有两个activity A和B,假如我们从A跳转到B,再B完成相应的工作以后finish掉B,然后传数据给A,A在接受到数据以后做相应的操作。我们可以使用这三个函数:
A:
//启动B
Intent intent = new Intent();
intent.setClass(A.this, B.class);
startActivityForResult(intent, 2);//2是我们自己定义常量,对应下面使用到的resultCode
B:
//do something
setResult(2, null);
finish();
以上主要代码完成后我们需要在A中override onActivityResult()函数:
A:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (2 == requestCode) {
//do something
}
}
更详细的:
startActivityForResult与onActivityResult
androidActivity之间的跳转不只是有startActivity(Intent i)的,startActivityForResult(Intent intent, int requestCode)也是常用的方法。
其作用是可以用onActivityResult(int requestCode, int resultCode, Intent data)方法获得请求Activity结束之后的操作。
需要注意三个方法:startActivityForResult(Intent intent, int requestCode),onActivityResult(int requestCode, int resultCode, Intent data),setResult(int resultCode, Intent
data)
例如如下代码:从From跳转至ToB和ToC
From:
if(条件){
Intent intent = new Intent(this, ToB.class);
startActivityForResult(serverIntent, REQUE
4000
ST_CODE_01);//跳转至ToB
}else{
Intent intent = new Intent(this, ToC.class);
startActivityForResult(serverIntent, REQUEST_CODE_02);//跳转至ToC
}
public void onActivityResult(int requestCode, int resultCode, Intent data){
switch (requestCode) {
case REQUEST_CODE_01:
if(resultCode==Activity.RESULT_OK)
//do something
break;
case REQUEST_CODE_02:
//do something
break;
}
}
这里说说startActivityForResult(Intent intent, int requestCode)的参数,第一个Intent不用说了,需要注意的是第二个,我们用的是REQUEST_CODE_01和REQUEST_CODE_02,其实这个是我们自己定义的一个int型常量,用于标记的,具体作用可在onActivityResult方法里看到,用于判断是从哪个Activity返回的。
ToB:
Intent intent = new Intent();
intent.putExtra(key, value);
setResult(Activity.RESULT_OK, intent);
finish();//结束之后会将结果传回From
ToC:
Intent intent = new Intent();
intent.putExtra(key, value);
setResult(Activity.RESULT_OK, intent);
finish();//结束之后会将结果传回From
setResult的第一个参数对应上面onActivityResult的第二个参数,注意别把onActivityResult的第一个参数与第二个参数搞混淆了,一个是请求标记,一个是返回标记。
onActivityResult(int requestCode, int resultCode, Intent data)
setResult(int resultCode, Intent data)
这三个函数,尤其要注意他们的参数!
现在有两个activity A和B,假如我们从A跳转到B,再B完成相应的工作以后finish掉B,然后传数据给A,A在接受到数据以后做相应的操作。我们可以使用这三个函数:
A:
//启动B
Intent intent = new Intent();
intent.setClass(A.this, B.class);
startActivityForResult(intent, 2);//2是我们自己定义常量,对应下面使用到的resultCode
B:
//do something
setResult(2, null);
finish();
以上主要代码完成后我们需要在A中override onActivityResult()函数:
A:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (2 == requestCode) {
//do something
}
}
更详细的:
startActivityForResult与onActivityResult
androidActivity之间的跳转不只是有startActivity(Intent i)的,startActivityForResult(Intent intent, int requestCode)也是常用的方法。
其作用是可以用onActivityResult(int requestCode, int resultCode, Intent data)方法获得请求Activity结束之后的操作。
需要注意三个方法:startActivityForResult(Intent intent, int requestCode),onActivityResult(int requestCode, int resultCode, Intent data),setResult(int resultCode, Intent
data)
例如如下代码:从From跳转至ToB和ToC
From:
if(条件){
Intent intent = new Intent(this, ToB.class);
startActivityForResult(serverIntent, REQUE
4000
ST_CODE_01);//跳转至ToB
}else{
Intent intent = new Intent(this, ToC.class);
startActivityForResult(serverIntent, REQUEST_CODE_02);//跳转至ToC
}
public void onActivityResult(int requestCode, int resultCode, Intent data){
switch (requestCode) {
case REQUEST_CODE_01:
if(resultCode==Activity.RESULT_OK)
//do something
break;
case REQUEST_CODE_02:
//do something
break;
}
}
这里说说startActivityForResult(Intent intent, int requestCode)的参数,第一个Intent不用说了,需要注意的是第二个,我们用的是REQUEST_CODE_01和REQUEST_CODE_02,其实这个是我们自己定义的一个int型常量,用于标记的,具体作用可在onActivityResult方法里看到,用于判断是从哪个Activity返回的。
ToB:
Intent intent = new Intent();
intent.putExtra(key, value);
setResult(Activity.RESULT_OK, intent);
finish();//结束之后会将结果传回From
ToC:
Intent intent = new Intent();
intent.putExtra(key, value);
setResult(Activity.RESULT_OK, intent);
finish();//结束之后会将结果传回From
setResult的第一个参数对应上面onActivityResult的第二个参数,注意别把onActivityResult的第一个参数与第二个参数搞混淆了,一个是请求标记,一个是返回标记。
相关文章推荐
- Activity---startActivityForResult()、onActivityResult()和setResult()使用
- android.app.Activity类中的startActivityForResult()方法、onActivityResult()方法、setResult()方法的使用
- startActivityForResult()、onActivityResult()和setResult()使用
- [Android学习笔记]startActivityForResult和onActivityResult的使用
- onActivityResult(),startActivityForResult()的使用
- 关于activity的startActivityForResult / onActivityResult / setResult学习和理解
- Android startActivityForResult 和 setResult的使用
- Android的startActivityForResult()与onActivityResult()与setResult()参数分析,activity带参数的返回
- Android学习之使用startActivityForResult()和onActivityResult()进行跳转并返回数据
- Activity A使用startForResult启动Activity B,B什么都不做并返回A,A中的onActivityResult回调是否会执行?
- Android的startActivityForResult()与onActivityResult()与setResult()参数分析,activity带参数的返回
- startActivityForResult,onActivityResult,setResult的用法
- Android使用 startActivityForResult 、 onActivityResult 时的注意事项
- Android startActivityForResult 和 setResult的使用
- 在Fragment中使用startActivityForResult和onActivityResult
- Android使用 startActivityForResult 、 onActivityResult 时的注意事项
- startActivityForResult+onActivityResult+setResult
- startActivityForResult、setResult、onActivityForResult
- android-Activity的跳转与传值:startActivityForResult,setResult,onActivityResult
- startActivityForResult调用后立即响应了OnActivityResult()方法,导致setResult()后无响应