您的位置:首页 > 移动开发 > Android开发

Android开发之Activity startActivityForResult()方法详解

2016-05-27 11:58 519 查看
Android系统可以用startActivity(…)从一个activity中启动另一个activity,我们需要用到Intent ,那么Intent是什么呢?

Intent其实就是”一个操作的意图”,可以指向不同的activity(不管是系统自带的,还是自己创建的)。

如果从一个 activityA 中指向另一个 activityB 时,activityB finish()的时候需要返回一个值给activityA,那么我们就需要用到startActivityForResult(…)方法来启动。

startActivityForResult(Intent,requestCode)方法有两个参数Intent即指定我们要转向的activity 、

requestCode 请求码,即调用startActivityForResult() 传递过去的值

resultCode 结果码,结果码用于标识返回数据来自哪个新Activity

当activityB finish()时我们重写onActivityResult(int requestCode, int resultCode, Intent data)方法进行接收activityB 返回的值

下面就用代码详细的说明下

1.首先我们从activityA 启动到activityB

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_layout_a);
button1 = (Button) findViewById(R.id.button1);
textView = (TextView) findViewById(R.id.textView);

button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(Activity_A.this,Activity_B.class);
startActivityForResult(i, 1000);
}
});
}


2.activityB finish() 返回值

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_layout_b);
button1 = (Button) findViewById(R.id.button1);

button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent();
i.putExtra("index", "lululu1");
/*
这里我们用setResult方法resultCode返回码999
*/
setResult(999, i);
finish();
}
});
}


3.activityA获取到activityB返回的值

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

Log.i("qqq", "requestCode"+requestCode);
Log.i(
4000
"qqq", "resultCode"+resultCode);
Log.i("qqq", "data"+data.getStringExtra("index"));
}


以上的操作就可以获取到activityB返回的值了,但是可以大家还是很迷惑requestCode、与resultCode的作用,那我们就再来详细说一下两个码的作用:

requestCode:一个Activity有两个按钮,按钮1、按钮2,点击这两个按钮都会打开同一个Activity,不管是那个按钮打开新Activity,当这个新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。在onActivityResult()方法如果需要知道新Activity是由那个按钮打开的,并且要做出相应的业务处理

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode){
case 1:
//来自按钮1的请求,作相应业务处理
case 2:
//来自按钮2的请求,作相应业务处理
}
}


resultCode:在一个Activity中,可能会使用startActivityForResult()方法打开多个不同的Activity处理不同的业务,当这些新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。为了知道返回的数据来自于哪个新Activity,在onActivityResult()方法中可以这样做(ResultActivity和NewActivity为要打开的新Activity)

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(resultCode){
case 1:
// ResultActivity的返回数据
case 2:
// NewActivity的返回数据
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android开发