在开发app时,有时我们需要传回数据,例如进入图库选择图片后,需要传回图片的信息,Android提供了一个startActivityForResule方法来实现回传数据。首先说说startActivityForResult和startActivity的区别:startActivity仅仅是跳转到目标页面。而使用startActivityForResul,t不仅会跳转到指定Activity,跳转到的Activity关闭后,会回到前一个Activity,还会调用onActivityResult方法。
接下来通过一个简单的示范代码显示如何使用。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void click(View view){
Intent intent =new Intent(this,Activity02.class);
startActivityForResult(intent,1);
}
protected void onActivityResult(int requestCode,int resultCode,Intent data){
super.onActivityResult(requestCode,resultCode,data);
if(resultCode==1){
String data1=data.getStringExtra("extra_data");
Log.i("Activty01",data1);
}
}
}
首先在MainActivity中启动Activity02,startActivityForResult()第一个参数是Intent,第二个参数是请求码,用于判断数据的来源。
onActivityResult方法有三个参数,第一个requestCode,表示在启动Activity时传递的请求码;第二个参数resultCode,表示返回数据时传入结果码;第三个参数data,表示携带返回数据的Intent。
public class Activity02 extends AppCompatActivity{
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity02);
}
public void click(View view) {
Intent intent = new Intent();
intent.putExtra("extra_data", "Hello Activity01");
setResult(1, intent);
finish();
}
}
setResult接受两个参数,第一个resulrCode结果码,一般使用0或1,第二个参数则是把带有数据的Intent传递回去,最后调用finish()销毁当前Activity。
结果可以看见打印出了数据Hello Activity01。
需要注意的是,在一个Activity中很可能调用startActivityForResult()启动多个Activity,每一个返回的数据都会调到onActivityResult()这个方法中,因此,首先要做的就是检查requestCode的值来判断数据来源,然后再通过resultCode的值来判断数据处理结果是否成功。