使用功能Intent在活动之间传递数据
使用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 = https://www.it610.com/article/intent.getStringExtra("extra_data");
//通过键取值
返回数据给上一个活动
- 通过调用finish()方法返回上一个活动
- 通过按下back键来返回上一个活动
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 = https://www.it610.com/article/data.getStringExtra("data_return");
}
break;
default:
break;
}
}
为什么在启动活动时传入了请求码:由于在一个活动中有可能调用
startActivityForResult()
方法去启动很多不同的活动,每一个活动返回的数据都会回调onActivityResult()
方法,因此我们首先做的是通过检查请求码requestCode
的值来判断数据来源。【使用功能Intent在活动之间传递数据】注意:当用户点击功能键back来销毁一个活动时,活动就会调用
onBackPressed()
方法,可以在此方法中添加代码是返回数据:@Override
public void onBackPressed() {
Intent intent = new Intent();
intent.putExtra("data_return", "Hello World");
setResult(RESULT_OK, intent);
finish();
}
推荐阅读
- 由浅入深理解AOP
- 【译】20个更有效地使用谷歌搜索的技巧
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- iOS中的Block
- Linux下面如何查看tomcat已经使用多少线程
- 使用composer自动加载类文件
- android|android studio中ndk的使用
- 使用协程爬取网页,计算网页数据大小