大家都知道Activity间的跳转可以使用startActivity(),然后传入1个Intent,指定组件即可,然后跳转的那个Activity要返回时,需要再使用一次startActivity(),如果需要传递数据回来,肯定需要用Intent,但是不断地调用startActivity(),每次跳转系统都会在task中生成一个新的Activity实例,并且放于栈结构的顶部,当我按下后退键时,才能看到原来的Activity实例。当然这是在standard启动模式,不管有没有已存在的实例,都生成新的实例。
所以要使用finish()来返回,但是如果我不使用startActivity()也就是不能传入Intent时,我们该怎么把Intent也就是数据传递回去呢?
假设有2个Activity A和B,这时候Activity A就该使用startActivityForResult()了,使用startActivityForResult()的同时必须使用onActivityResult(),顾名思义,就是得到Activity B返回的结果,也就是通过Intent携带的数据,Intent简直是往返两地的高铁啊,呵呵。
怎么使用startActivityForResult()呢,startActivityForResult()需要一个int类型的请求码,这个请求码会随着Activity A的跳转而带过去,而跳转过去的Activity B finish()的时候,我们需要使用setResult()来设置一个结果码,这个结果码必须为RESULT_OK,因为Activity A的onActivityResult()会依次判断结果码和请求码,只有都符合的时候,OK,我们可以从onActivityResult()的参数Intent data中获取数据啦,这个data就是Activity B中的Intent。
下面是Demo,先看Activity A:
/**
* 主界面
*
* @author yuzhentao
*/
public class MainActivity extends Activity {
private static final int REQUEST_CODE = 1;
private Context context;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = this;
initView();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {//如果结果码等于RESULT_OK
if (requestCode == REQUEST_CODE) {
String result = data.getExtras().getString("result");
tv.setText(result);
}
}
}
private void initView() {
tv = (TextView) findViewById(R.id.textview_activity_main);
findViewById(R.id.button_activity_main).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivityForResult(new Intent(context, DemoActivity.class), REQUEST_CODE);//带上requestCode跳转
}
});
}
}
下面是Activity B:
/**
* DemoActivity
*
* @author yuzhentao
*/
public class DemoActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_demo);
initView();
}
private void initView() {
findViewById(R.id.button_activity_demo).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("result", "你好,我是返回的数据");
setResult(RESULT_OK, intent);//设置resultCode
finish();
}
});
}
}
最后是效果图:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2QvwVe0lmdhJ3ZvwFM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2LcZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39DOwQTMzADN2ETNxMDM2EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
Demo地址:http://download.csdn.net/detail/qq_23940659/9467070