Intent除了可以开启一个活动,还能在启动活动的时候传递数据,此时Intent相当于一个保存数据的库,我们先把数据保存在Intent中,然后再根据各个activity的需要从其中取出数据。
一、使用Intent向下一个activity传递数据
1、思路:Intent中提供了一系列putExtra()方法的重载,可以把我们想要传递的数据暂时保存在Intent中,当启动另外一个活动后,再把这些数据从Intent中取出来就行了。
2、在FirstActivity.java中有一个字符串,把这个字符串传递到SecondActivity.java中,操作如下:
FirstActivity.java中的代码:
SecondActivity.java中的代码:
3、效果展示:
点击button1:进入到SecondActivity.java的活动页面
查看Logcat:
1、根据SecondActivity.java中Log.d()传入的tag数据添加一个过滤器:SecondActivity
2、将过滤器选为SecondActivity,就会看到打印出的数据
二、使用Intent返回数据给上一个活动
1、在Activity中有一个方法也可以启动活动,这个方法就是:startActivityForResult()方法,它可以在活动销毁的时候返回一些数据给上一个活动,startActivityForResult()方法接受两个参数。一个参数是Intent,第二个是请求码,用于在之后的回调中判断数据的来源,请求码只要是唯一的就行了(比如常量)。
FirstActivity.java的代码:
1 public class FirstActivity extends AppCompatActivity { 2 @Override 3 protected void onCreate(@Nullable Bundle savedInstanceState) { 4 super.onCreate(savedInstanceState); 5 setContentView(R.layout.first_layout); 6 Button button = (Button) findViewById(R.id.button1); 7 button.setOnClickListener(new View.OnClickListener() { 8 @Override 9 public void onClick(View view) { 10 Intent intent = new Intent(FirstActivity.this, SecondActivity.class); 11 startActivityForResult(intent, 1); 12 /* 13 1、startActivityForResult()方法:当一个活动销毁时返回一个数据给上一个活动,它也可以开启一个活动,它传入两个参数 14 第一个参数:intent 15 第二个参数:请求码,唯一即可,用于判断数据的来源 16 2、使用startActivityForResult()方法来开启SecondActivity,当SecondActivity活动销毁过后,会调用上一个活动的onActivityResult()方法, 17 即这里的FirstActivity中的onActivityResult()方法,因此我们要在FirstActivity活动中重写onActivityResult()方法。 18 onActivityResult()这个方法的作用是得到返回的数据。 19 */ 20 } 21 }); 22 } 23 24 @Override 25 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 26 switch (requestCode) { 27 case 1: 28 if (resultCode == RESULT_OK) { 29 String returnData = data.getStringExtra("return_extra"); 30 Log.d("FirstActivity", returnData); 31 /* 32 1、该方法中传入三个参数: 33 requestCode:请求码 34 resultCode:处理结果 35 data:携带数据的Intent 36 */ 37 } 38 break; 39 default: 40 break; 41 } 42 } 43 }
SecondActivity.java中的代码:
2、运行效果:
点击button1:进入SecondActivity活动界面
打开Logcat查看打印数据(先创建一个FirstActivity的过滤器):
三、点击Back键返回数据
上面返回给FirstActivity的数据是在点击SecondActivity活动界面的button2按钮触发的,如果用户直接通过手机的Back键回到FirstActivity界面,也是可以返回数据,我们只需要在SecondActivity.java中重写onBackPressed()方法就能解决该问题,代码如下:
想要点击按钮与Back键均能返回数据,其他代码不变,把SecondActivity的代码结合就行了:
1 public class SecondActivity extends AppCompatActivity { 2 @Override 3 protected void onCreate(@Nullable Bundle savedInstanceState) { 4 super.onCreate(savedInstanceState); 5 setContentView(R.layout.second_layout); 6 Button button=findViewById(R.id.button2); 7 button.setOnClickListener(new View.OnClickListener() { 8 @Override 9 public void onClick(View view) { 10 Intent intent=new Intent(); 11 intent.putExtra("return_extra","Button FirstActivity"); 12 setResult(RESULT_OK,intent); 13 finish(); 14 /* 15 1、这里的Intent仅仅是传递数据而已,没有任何意图,通过putExtra()方法把数据存放在intent中 16 2、setResult()方法:这个方法很重要,是专门用于向上一个活动返回数据的,这个方法有两个参数: 17 第一个参数:用于向上一个活动返回数据的处理结果,RESULT_OK 、 RESULT_CANCELED两种 18 第二个参数:返回的数据,将带有数据的intent返回过去 19 3、finish():销毁活动 20 */ 21 } 22 }); 23 } 24 @Override 25 public void onBackPressed() { 26 Intent intent=new Intent(); 27 intent.putExtra("return_extra","Back FirstActivity"); 28 setResult(RESULT_OK,intent); 29 finish(); 30 } 31 }