Intent不仅可以用来启动活动,还可以在启动活动的时候传递数据。 思路很简单,Intent提供了一系列putExtra()方法的重载, 可以把我们想要传递的数据暂存在Intent中,启动了另一个活动后, 再把这些数据从Intent中取出就可以了。按钮中点击事件添加以下:
String data = "Hello SecondActivity";
Intent intent = new Intent(Test0422Activity.this,SecondActivity.class);
intent.putExtra("extra_data",data);
startActivity(intent);
我们使用显式Intent方式启动SecondActivity,并通过putExtra()方法传递了一个字符串, 接收两个参数,
然后在SceondActivity中取出数据并打印:
Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");
Log.d("SecondActivity",data);
首先通过getIntent()方法获取到用于启动SecondActivity的Intent, 然后调用getStringExtra()方法,传入相应键值,就可以得到传递的数据, 由于传递的是字符串,所以调用该方法,如果传递的是整型则使用 getIntExtra(),如果是布尔型 则用,getBooleanExtra()方法,以此类推。
Activity中还有一个StartActivityForResult()方法也是用于启动活动的, 但这个方法期望在活动被销毁的时候能够返回一个结果给上一个活动。 StartActivityForResult()接收两个参数,
修改按钮点击事件:
Intent intent = new Intent(Test0423Activity.this,SecondActivity.class);
startActivityForResult(intent,1);
请求码只要是一个唯一值就可以了。 然后在SecondActivity中给按钮注册点击事件,并在点击事件中添加返回数据的逻辑
Intent intent = new Intent();
intent.putExtra("data_return","Hello Test0423Activity");
setResult(RESULT_OK,intent);
finish();
还是构建了一个Intent,不过这个Intent仅仅用于传递数据而已, 没有指定任何“意图”,把要传递的数据存放在Intent中,调用setResult()方法, 专门用于向上一个活动返回数据的,接收两个参数,
由于使用的是startActivityForResult()方法启动的SecondActivity的, 在被销毁之后会回调上一个活动的onActivityResult()方法,因此需要重写这个方法:
@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data){
switch(requestCode){
case 1:
if (resultCode == RESULT_OK){
String returnedData = data.getStringExtra("data_return");
Log.d("Test0423Activity",returnedData);
}
break;
default:
}
}
onActivityResult()方法带有三个参数,
由于在一个活动中有可能调用startActivityForResult()方法启动很多不同的活动, 每一个活动返回的数据都会回调onActivityResult()方法,因此需要先判断requestCode的值来判断数据来源, 确定数据是从SecondActivity返回的,在通过resultCode值来判断处理结果是否成功, 最后从data中取值打印出来。
如果在SecondActivity中不是通过按钮点击返回的,而是按下Back键, 可以在SecondActivity中重写onBackPressed()方法解决问题:
@Override
public void onBackPressed(){
Intent intent = new Intent();
intent.putExtra("data_return","Hello Test0423Activity");
setResult(RESULT_OK,intent);
finish();
}