之前学习的都是单个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(); }