先看下这三者的关系:
Activity_A通过startActivityForResult()去启动了Activity_B,
Activity_B在自己finish()之前,可以通过setResult()方法传递一个参数给Activity_A
Activity_A可以通过复写onActivityResult()方法来拿到回传值。
启动另外一个Activity有两种方法:
1、startActivity()主要作用就是启动acitivty,不可以回传数据。
2、startActivityForResult()主要作用也是启动acitivty,不同的就是它可以回传数据。
当activity关闭后,如果有返回值,则会在这个onActivityResult方法内接收。
��栗子来咯
Activity_A
package test.ban.com.teststartactivityforresultactivity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class Activity_A extends Activity implements
View.OnClickListener {
private TextView mText01;
private TextView mText02;
private Button button01;
private Button button02;
private Intent mIntent;
private int requestCode;
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mText01 = (TextView) findViewById(R.id.mText01);
mText02 = (TextView) findViewById(R.id.mText02);
button01 = (Button) findViewById(R.id.mButton01);
button02 = (Button) findViewById(R.id.mButton02);
button01.setOnClickListener(this);
button02.setOnClickListener(this);
mText01.setText("第一条数据");
mText02.setText("第二条数据");
mIntent = new Intent();
//参数一为当前Package的context,当前Activity的context就是this,其他Package可能用到createPackageContex()
//参数二为你要打开的Activity的类名
mIntent.setClass(Activity_A.this, Activity_B.class);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.mButton01:
// 请求码requestCode的值随便设置,但必须>=0
requestCode = 0;
/**
* 跳转的时候不是采用startActivity(intent) 这个方法,而是startActivityForResult(intent, 0)
*/
startActivityForResult(mIntent, requestCode);
break;
case R.id.mButton02:
requestCode = 2;
/**
* 跳转的时候不是采用startActivity(intent) 这个方法,而是startActivityForResult(intent, 0)
*/
startActivityForResult(mIntent, requestCode);
break;
default:
break;
}
}
/**
* 重写onActivityResult方法,用来接收Activity_B回传的数据。
* <p>
* 回调方法,从Activity_B页面回来的时候会执行这个方法
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//data为Activity_B中回传的Intent
//change01、change02即为回传的值
String change01 = data.getStringExtra("change01");
String change02 = data.getStringExtra("change02");
// 根据上面发送过去的请求吗来区别
switch (requestCode) {//resultCode为回传的标记,我在B中回传的是resultCode
case 0:
mText01.setText(change01);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
mText01.setText("1000");
}
}, 1000);
break;
case 2:
mText02.setText(change02);
break;
default:
break;
}
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/mText01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/mText02"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/mButton01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="改变第一行文本的值"
/>
<Button
android:id="@+id/mButton02"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="改变第二行文本的值"
/>
</LinearLayout>
Activity_B
package test.ban.com.teststartactivityforresultactivity;/**
* Created by apple on 16/8/29.
*/
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
/**
* 作者:ban on 16/8/29 09:44
*/
public class Activity_B extends Activity {
private int resultCode = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
//数据是使用Intent返回
Intent mIntent = new Intent();
//把返回数据存入Intent
mIntent.putExtra("change01", "第一条数据改为:1000");
mIntent.putExtra("change02", "第二条数据改为:2000");
//设置返回数据
//在Activity_B中回传数据时采用setResult方法,并且之后要调用finish方法。
//mIntent为Activity_A传来的带有Bundle的intent,当然也可以自己定义新的Bundle
this.setResult(resultCode, mIntent);
// this.finish();
}
}
activity_main2.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="文本的值已经改变"
/>
</LinearLayout>
源码地址:http://download.youkuaiyun.com/detail/u010566681/9615617