使用startActivityForResult回传数据

在开发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的值来判断数据处理结果是否成功。

你可能感兴趣的:(新手)