标签:
//此系列博文是《第一行Android代码》的学习笔记,如有错漏,欢迎指正!
我们可以使用 Intent 来启动一个活动, 还可以在启动活动的时候传递数据的,下面一起来看一下:
一、向下一个活动传递数据
Intent中提供了一系列 putExtra()方法的重载,可以把我们想要传递的数据暂存在 Intent 中,启动了另一个活动后,只需要把这些数据再从Intent 中取出就可以了。例如我们可以在mainactivity中创建一个字符串,然后把它传递到second_activity里:
1)先在MainActivity中构建好Intent:
@Override
public void onClick(View v) {
String data = "Hello second_activity";
Intent intent = new Intent(MainActivity.this, second_activity.class);
intent.putExtra("extra_data", data);
startActivity(intent);
}
我们使用显式 Intent的方式来启动 second_activity,并通过 putExtra()方法传递了一个字符串。注意这里 putExtra()方法接收两个参数,第一个参数是键名,用于后面从 Intent中取值,第二个参数才是真正要传递的数据。
2)在second_activity中将intent的数据提取出来:
1 public class second_activity extends Activity {
2
3 @Override
4 protected void onCreate(Bundle savedInstanceState) {
5 super.onCreate(savedInstanceState);
6 setContentView(R.layout.secend);
7 Intent intent = getIntent();
8 String data = intent.getStringExtra("extra_data");
9 Log.d("SecondActivity", data);
10 }
11
12 }
这里我们通过 getIntent()方法获取到用于启动 second_activity 的 Intent,然后调用getStringExtra()方法,传入相应的键值,就可以得到传递的数据了。这里由于我们传递的是字符串,所以使用 getStringExtra()方法来获取传递的数据,如果传递的是整型数据,则使用getIntExtra()方法,传递的是布尔型数据,则使用 getBooleanExtra()方法,以此类推。
此时启动程序,运行效果如下:
按下button 1后可看到logcat中将传入的字符串打印出来了:
二、将数据返回给上一个活动
Activity中有一个 startActivityForResult()方法也是用于启动活动的, 这个方法在活动销毁的时候能够返回一个结果给上一个活动。我们可以在这里使用它:
1)修改MainActivity中的onClick()方法:
1 button1.setOnClickListener(new OnClickListener() {
2 @Override
3 public void onClick(View v) {
4 Intent intent = new Intent(MainActivity.this, second_activity.class);
5 startActivityForResult(intent, 1);
6 }
7 });
这里我们使用了 startActivityForResult()方法来启动 second_activity,请求码只要是一个唯一值就可以了,这里传入了 1即可。
2)在second_activity中注册一个button 2,添加返回数据的逻辑:
1 public class second_activity extends Activity {
2 @Override
3 protected void onCreate(Bundle savedInstanceState) {
4 super.onCreate(savedInstanceState);
5 setContentView(R.layout.second);
6
7 Button button2 = (Button) findViewById(R.id.button_2);
8 button2.setOnClickListener(new OnClickListener() {
9 @Override
10 public void onClick(View v) {
11 Intent intent = new Intent();
12 intent.putExtra("data_return", "Hello MainActivity");
13 setResult(RESULT_OK, intent);
14 finish();
15 }
16 });
17 }
18 }
我们构建了一个 Intent,只不过这个 Intent 仅仅是用于传递数据而已,它没有指定任何的“意图” 。紧接着把要传递的数据存放在 Intent 中,然后调用了 setResult()方法。这个方法是专门用于向上一个活动返回数据的。setResult()方法接收两个参数,第一个参数用于向上一个活动返回处理结果,一般只使用 RESULT_OK 或RESULT_CANCELED 这两个值,第二个参数则是把带有数据的 Intent 传递回去,然后调用
了 finish()方法来销毁当前活动。
3)重写主活动的onActivityResult()方法:
由于我们是使用 startActivityForResult()方法来启动 second_activity的, 在 second_activity被销毁之后会回调上一个活动的 onActivityResult()方法,因此我们需要在 MainActivity 中重写这个方法来得到返回的数据:
1 @Override
2 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
3 switch (requestCode) {
4 case 1:
5 if (resultCode == RESULT_OK) {
6 String returnedData = data.getStringExtra("data_return");
7 Log.d("MainActivity", returnedData);
8 }
9 break;
10 default:
11 }
12 }
onActivityResult()方法带有三个参数,第一个参数 requestCode,即我们在启动活动时传入的请求码。 第二个参数 resultCode, 即我们在返回数据时传入的处理结果。 第三个参数 data,即携带着返回数据的 Intent。
因为一个主活动可能调用startActivityForResult()方法去启动很多不同的活动,每一个活动返回的数据都会回调到 onActivityResult()这个方法中。所以我们需要先判断requestCode(请求码)来确定活动的来源,在通过resultCode来判断活动执行的情况。
三、在按下back键时传回数据
在上面的例子中我们是通过按下button 2 来返回数据的,假如想通过按下back键来传递数据呢?这是我们可以通过重写second_activity中的 onBackPressed()方法:
1 @Override
2 public void onBackPressed() {
3 Intent intent = new Intent();
4 intent.putExtra("data_return", "Hello FirstActivity");
5 setResult(RESULT_OK, intent);
6 finish();
7 }
//End.
标签:
原文地址:http://www.cnblogs.com/Vincent-Bryan/p/5367145.html