之前学习的都是单个activity,今天 看到了2个activity之间的切换与相互传递数据。

一、activity之间的切换    

activity之间的切换通过intent来实现。

    intent有显示intent和隐式intent。

     现在有2个activity,一个是MainActivity ,另外一个是SecondActivity,主activity是MainActivity。

在MainActivity中加入一个button。

    显示intent:

    在button的的点击方法中,代码如下

    

public void change(View view){
    Intent intent=new Intent(MainActivity.this,SecondActivity.class);
    startActivity(intent);
}

    这样在点击按钮后,就会切换到第二个activity对应的视图。


二、activity之间传递数据

    在MainActivity中的button方法中写如下:

 String data="hello SecondActivity";
 Intent inteng=new Intent(MainActivity.this,SecondActivity.class);
inteng.putExtra("extra_data",data);
 startActivity(inteng);

    在secondactivity中的onCreate()接受

    

Intent intent =getIntent();
String extra_data = intent.getStringExtra("extra_data");

三、第二个activity向mainactivity中回传数据

    l利用startActivityForResult()也是用于启动活动,但是这个方法的期望是在活动销毁时能返回一个结果给上一个活动。,这个方法有2个参数,第一个参数是intent,第二个参数是请求吗,用于在之后的回调中判断数据来源

    1、在MainActivity中,

    Intent intent=new Intent(MainActivity.this,SecondActivity.class);

    startActivityForResult(intenty,1);

    2、在SecondActivity中的点击事件中

public void result(View view){
    Intent intent=new Intent();
    intent.putExtra("return_data","hello first");
    setResult(RESULT_OK,intent);
    finish();
}

3、在MainActivity中,重写onActivityResult()方法,来获取上一个activity返回的结果
    public void onActivityResult(int requestCode,int resultCode,intent data){
        switch(requestCode){
            case 1:
            if(resultCode==RESULT_OK){
                String return_data=data.getStringExtra("extra_data");
                Log.d("firstActivity",return_data);
            }
            brake;
        }
    }

    

4、如果在第二个activity中是通过back键来回退到第一个activity中,那么result()里的方法不会被执行,这个时候,在secondActivity中要重写onBackPressed()方法

    

public void onBackPressed(){
    Intent intent=new Intent();
    intent.putExtra("return_data","hello first");
    setResult(RESULT)OK,intent);
    finish();
}