《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 }

 

posted on 2015-10-20 16:07  matclone  阅读(149)  评论(0)    收藏  举报

导航