Android Activity启动与返回结果详解
76 浏览量
更新于2024-08-29
收藏 80KB PDF 举报
"这篇文档详细解析了如何在Android应用程序中使用`Activity`进行启动并接收返回结果的过程。通过`startActivityForResult()`方法启动新的`Activity`,并利用`onActivityResult()`来获取返回的数据。"
在Android开发中,`Activity`是用户界面的基本单元,它允许用户与应用进行交互。当需要在一个`Activity`中启动另一个`Activity`并获取返回数据时,我们需要使用特定的方法来实现这一功能。以下是对这个过程的深入解析:
1. 启动新Activity并传递请求码:
- 使用`startActivityForResult(Intent intent, int requestCode)`方法启动新的`Activity`。`Intent`对象用来描述要启动的`Activity`以及传递给它的数据。`requestCode`是一个整数,用于识别不同的启动请求,以便在结果返回时区分不同的操作。
```java
startActivityForResult(new Intent(MainActivity.this, OtherActivity.class), 1);
```
在上面的代码中,`MainActivity`启动了`OtherActivity`,并且请求码被设置为1。
2. 在新Activity中处理数据并返回:
- 在新启动的`Activity`(如`OtherActivity`)中,执行完所需的操作后,可以通过`setResult()`方法设置返回的结果。可以包括一个结果码(`resultCode`)和一个`Intent`,其中`Intent`可以携带返回的数据。
```java
Intent result = new Intent();
// 设置返回数据
result.putExtra("key", "value");
setResult(resultCode, result);
finish();
```
`resultCode`通常是`RESULT_OK`或`RESULT_CANCELED`,表示操作成功或取消。`Intent`中的数据可以通过`putExtra()`方法添加。
3. 接收返回结果:
- 当新启动的`Activity`关闭时,原始`Activity`(这里是`MainActivity`)的`onActivityResult()`方法会被调用。在这里,我们可以根据`requestCode`判断哪个请求返回了结果,并通过`resultCode`和`Intent`获取数据。
```java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if (resultCode == RESULT_OK) {
String returnedValue = data.getStringExtra("key");
Log.d(TAG, "Received value: " + returnedValue);
// 处理返回的数据
} else if (resultCode == RESULT_CANCELED) {
// 处理取消的情况
}
}
}
```
在`onActivityResult()`中,我们检查`requestCode`是否匹配之前启动新`Activity`时的请求码,然后根据`resultCode`决定如何处理返回的数据。
这种机制使得在多个`Activity`之间传递数据成为可能,特别适用于需要用户交互并返回结果的场景,例如选择照片、输入数据等。同时,`requestCode`可以用于区分不同的启动请求,确保正确处理来自不同来源的结果。
2015-03-21 上传
2021-01-20 上传
2021-01-04 上传
2021-01-06 上传
2021-01-04 上传
点击了解资源详情
2021-01-05 上传
weixin_38732842
- 粉丝: 4
- 资源: 951
最新资源
- NIST REFPROP问题反馈与解决方案存储库
- 掌握LeetCode习题的系统开源答案
- ctop:实现汉字按首字母拼音分类排序的PHP工具
- 微信小程序课程学习——投资融资类产品说明
- Matlab犯罪模拟器开发:探索《当蛮力失败》犯罪惩罚模型
- Java网上招聘系统实战项目源码及部署教程
- OneSky APIPHP5库:PHP5.1及以上版本的API集成
- 实时监控MySQL导入进度的bash脚本技巧
- 使用MATLAB开发交流电压脉冲生成控制系统
- ESP32安全OTA更新:原生API与WebSocket加密传输
- Sonic-Sharp: 基于《刺猬索尼克》的开源C#游戏引擎
- Java文章发布系统源码及部署教程
- CQUPT Python课程代码资源完整分享
- 易语言实现获取目录尺寸的Scripting.FileSystemObject对象方法
- Excel宾果卡生成器:自定义和打印多张卡片
- 使用HALCON实现图像二维码自动读取与解码