《Android第一行代码》学习记录004 - 通过Intent在活动间传递数据
按照传递数据的方式可以分为两类:
1、将数据从主调活动传递给被调活动;
思路:
- Intent提供一系列putExtra()方法的重载,用于在主调活动中将我们需要传递的数据暂存在Intent中
- Intent也提供一系列getTypeExtra()方法(Type:可以是String, Int等等,根据暂存数据的类型而定)的重载,用于在被调活动中将暂存在Intent中的数据取出
在主调活动中我们可以这样:
1 String someData = "这是需要传递的字符串"; 2 Intent intent = new Intent(MainActivity.this, OtherActivity.class); 3 intent.putExtra("information", someData); 4 startActivity(intent);
然后在被调活动中我们这样取出数据:
1 Intent intent = getIntent(); 2 String someData = intent.getStringExtra("information"); 3 ... // 进行其他操作
2、将数据从被调活动返回给主调活动;
思路:
- startActivityForResult()方法是用于启动活动的,它期望在活动销毁时能够返回一个结果给主调活动;
- 一个主调活动可能会启动多个被调活动,基于这个原因,在主调活动中必须对不同的被调活动所返回的结果进行区分(从哪个活动返回,活动的执行情况);
- 被调活动的销毁方式(是通过活动提供的返回功能还是通过用户按[Back]键返回)不能影响被调活动返回结果;
在主调活动中,我们需要做两件事:
1、启动被调活动:
1 Intent intent = new Intent(MainActivity.this, OtherActivity.class); 2 startActivityForResult(intent, 1); // 第二个参数是请求码 3 /* 4 多个不同的被调活动,通过不同的请求码进行区分 5 */
2、重载onActivityResult()方法:
1 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 2 switch (requestCode) { 3 case 1: 4 if (resultCode == RESULT_OK) { 5 // 处理过程 6 } else { 7 // 处理过程 8 } 9 } 10 break; 11 12 case 2: 13 if (resultCode == RESULT_OK) { 14 // 处理过程 15 } else { 16 // 处理过程 17 } 18 } 19 break; 20 .... 21 default: 22 }
在被调活动,我们除了通过intent.putExtra()方法将数据暂存在intent中,还需要对通过setResult()方法对处理结果进行设置:
1 setResult(RESULT_OK, intent);
为了解决用户通过[Back]键返回的问题,我们可以将被调活动的onBackPressed()方法进行重载:
1 // override 2 protected void onBackPressed() { 3 String someData = "这是需要被传递给主调活动的字符串"; 4 Intent intent = new Intent(); 5 intent.putExtra("information", someData); 6 setResult(RESULT_OK, intent); 7 finish(); 8 }
浙公网安备 33010602011771号