两个Activity之间通信可以通过Handler方法、Intent的方法等,但是有时候需要在两个Activity之间传递数据,需要使用到startActivityForResult,请看下面的情况:
假设现在有两个Activity:MainActivity和OtherActivity,OtherActivity通过MainActivity中的点击事件启动:
public void onClick(View view){
Intent intent=new Intent(MainActivity.this,OtherActivity.class);
startActivity(intent);
}
然而在OtherActivity在返回之后,需要向MainActivity传递或更新数据,则以下方法是不行的:
//OtherActivity返回MainActivity事件点击
......
public void onClick(View view){
Intent intent=new Intent(OtherActivity.this,MainActivity.class);
Bundle bundle=new Bundle();
bundle.putInt("data",data);//data为我们需要传递的数据
intent.putExtras(bundle);
startIntent(intent);
}
//MainActivity中获取Intent
......
public void onCreate(Bundle bundle){
super.onCreate(bundle);
setContentView(R.id.activity_main);
Intent intent=getIntent();//获取Intent
Bundle data=intent.getExtras();
int infor=bundle.getInt("data");//获取数据
......
}
以上方法只能单项传递数据:MainActivity向OtherActivity传递数据,不能实现OtherActivity向MainActivity传递数据,因为MainActivity是程序第一个启动的程序,在onCreate方法中将获取不到intent,程序将无法运行,导致RunTimeException!
而startActivityForResult(Intent intent, int requestCode)方法打开OtherActivity,OtherActivity 关闭后会向MainActivity传回数据,为了得到传回的数据,必须在MainActivity中重写onActivityResult(int requestCode, int resultCode, Intent data)方法。
在MainActivity中书写的代码如下:
public void onClick(View v) {
//第二个参数为请求码,可以自己编写
Intent intent=new Intent(MainActivity.this, OtherActivity.class);
startActivityForResult(intent, 0x10);
}
//为了得到OtherActivity返回的数据,必须重写onActivityResult方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
int data = data.getExtras().getInt("data");//得到OtherActivity 关闭后返回的数据
}
在OtherActivity中代码如下:
public void onClick(View v) {
Intent intent = new Intent(OtherActivity.this,MainActivity.class);
//把返回数据存入Bundle
Bundle bundle=new Bundle();
bundle.putInt("data", data);
intent.putExtras(bundle);
//设置返回数据,setResult第一个参数为int resultCode,第二个为 Intent intent
setResult(0x12, intent);
//关闭OtherActivity
finish();
}