使用Intent在传递数据,可以理解为Intent内部有一个Map集合,通过键值对存储数据,然后再在另一个活动中从Intent对象中取出数据
向下一个活动传递数据
Intent对象中有一个重载方法:putExtra()
方法,接收两个参数,第一个参数是键,第二个参数是值,第二个也就是要传递的数据.
存储数据的事例:
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("extra_data", "Hello World");
startActivity(intent);
拿取数据的事例:
Intent intent = getIntent(); //获取到启动该活动的Intent
String data = intent.getStringExtra("extra_data"); //通过键取值
返回数据给上一个活动
- 通过调用finish()方法返回上一个活动
- 通过按下back键来返回上一个活动
Activity中有一个方法startActivityForResult()
,此方法也是用于启动活动的,但这个方法期望在活动销毁的时候能够返回一个结果给上一个活动。
开启一个活动并要求返回结果:
int requestCode = 1; //请求码
startActivityForResult(intent, requestCode); //开启活动,并传递请求码
在启动的活动中,提供以下代码:
Intent intent = new Intent(); //这个Intent对象的作用只是存储数据
intent.putExtra("data_return", "Hello World"); //Intent对象存储数据
setResult(RESULT_OK, intent); //此方法专门向上一个活动返回数据
finish(); //销毁此活动
setResult()
方法接收两个参数,第一个参数用于向上一个活动返回处理结果,一般只是用RESULT_OK
或RESULT_CANCELED
,第二个参数则是把带有数据的Intent传递回去。
当我们使用startActivityForResult()
方法启动另一个活动时,当另一个活动被销毁之后会回调上一个活动的onActivityResult()
方法
我们在上一个活动中重写onActivityResult()
方法
/**
* requestCode:请求码,启动活动时传入的请求码
* resultCode:处理结果,返回数据时传入的处理结果
* data:携带返回数据的Intent对象
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case 1:
if (resultCode == RESULT_OK) {
String returnedData = data.getStringExtra("data_return");
}
break;
default:
break;
}
}
为什么在启动活动时传入了请求码:由于在一个活动中有可能调用startActivityForResult()
方法去启动很多不同的活动,每一个活动返回的数据都会回调onActivityResult()
方法,因此我们首先做的是通过检查请求码requestCode
的值来判断数据来源。
注意:当用户点击功能键back来销毁一个活动时,活动就会调用onBackPressed()
方法,可以在此方法中添加代码是返回数据:
@Override
public void onBackPressed() {
Intent intent = new Intent();
intent.putExtra("data_return", "Hello World");
setResult(RESULT_OK, intent);
finish();
}