
深入解析startActivityForResult实现数据回传

在Android开发中,`startActivityForResult`是一个用于启动一个新的Activity,并等待从该Activity返回结果的方法。这种方式通常用于创建需要两个Activity交互的场景,比如,一个Activity需要从另一个Activity获取数据。下面将详细介绍`startActivityForResult`的用法以及相关知识点。
### 关键知识点一:startActivityForResult的使用方法
当你需要从一个Activity启动另一个Activity,并且希望得到被启动Activity的结果时,你可以使用`startActivityForResult(Intent intent, int requestCode)`方法。这里的`intent`是用于启动目标Activity的Intent对象,而`requestCode`是一个请求码,用于在回调中识别返回的结果是由哪一个请求产生的。
#### 示例代码:
```java
// 创建一个用于启动目标Activity的Intent
Intent intent = new Intent(CurrentActivity.this, TargetActivity.class);
// 启动Activity并等待结果
startActivityForResult(intent, REQUEST_CODE);
```
这里的`REQUEST_CODE`是自定义的一个整数常量,它用来标识这次启动Activity的请求。当目标Activity结束后,你可以在`onActivityResult`回调方法中检查返回的结果。
### 关键知识点二:处理返回的数据
在目标Activity结束时,如果你希望返回一些数据给原始Activity,你需要在目标Activity中设置返回数据,并结束Activity。
#### 示例代码:
```java
// 在目标Activity中设置返回结果
Intent returnIntent = new Intent();
returnIntent.putExtra("result_key", "返回的数据");
// 设置请求码和结果码
setResult(Activity.RESULT_OK, returnIntent);
// 结束Activity
finish();
```
当目标Activity通过`setResult`方法设置结果并调用`finish`后,系统会回调原始Activity的`onActivityResult`方法。
### 关键知识点三:onActivityResult的实现
当从目标Activity接收到返回结果时,Android系统会回调原始Activity的`onActivityResult(int requestCode, int resultCode, Intent data)`方法。在这方法中,你可以通过检查`requestCode`和`resultCode`来确定返回的数据是否是你需要的,并从中提取数据。
#### 示例代码:
```java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// 检查请求码是否匹配
if (requestCode == REQUEST_CODE) {
// 检查结果码
if (resultCode == RESULT_OK) {
// 获取返回的数据
String result = data.getStringExtra("result_key");
// 处理返回的数据
}
}
}
```
在上面的代码中,`REQUEST_CODE`是之前启动Activity时使用的请求码,而`RESULT_OK`是结果码,用于判断目标Activity是否成功设置了返回结果。`data`参数包含了目标Activity通过`setResult`方法传递回来的Intent。
### 关键知识点四:注意事项
1. 在使用`startActivityForResult`方法时,需要注意请求码`requestCode`必须是正整数,且每个`startActivityForResult`调用都必须有一个唯一值。
2. 结果码`resultCode`通常使用`RESULT_OK`或`RESULT_CANCELED`,但也可以自定义其他整数值。
3. 如果在`onActivityResult`中处理完返回结果后不再需要其他操作,建议调用`super.onActivityResult(requestCode, resultCode, data)`,以保持正常的回调流程。
4. 不要滥用`startActivityForResult`,特别是如果你只需要从另一个Activity获取一个简单的数据,可以考虑使用其他方法,例如直接使用`startActivity`后调用`getIntent`来获取结果,以避免过度复杂化应用的结构。
通过以上内容的详细说明,我们了解了`startActivityForResult`的用法,回传数据的过程,以及如何在`onActivityResult`中处理返回的数据。在实际的Android开发工作中,合理的利用`startActivityForResult`可以有效完成Activity间的数据交互,提升用户体验。
相关推荐








火山哥
- 粉丝: 307
最新资源
- Pcomm控件及其库文件介绍与用途
- 北大青鸟学士后课程:.Net HR人事管理系统源码
- LTE安全鉴权与NAS加解密技术解析
- 基于OpenCV的RGBLPR车牌识别系统:覆盖多种车牌类型
- Java开发的J2ME记事本应用解析
- SSH2框架整合jar包全集指南
- SSD6实用测验2的答案解析与bits.c文件分析
- fsc100移植必备:硬件头文件解析
- 基于jquery和easyui打造美观后台管理静态页面
- 芯邦CBM2090E/2091量产工具升级至V1.8.3.2版本
- Realtek RTL8187系列笔记本无线网卡驱动安装教程
- 深入解析JavaMail包及其重要jar文件
- Java学习资源参考:实用方法和过程指南
- 自由选择关卡的迷宫游戏界面设计与难度控制
- 使用VC2010编写的逻辑真判断程序
- DVR USB监控驱动:全方位提升监控效率
- 国产gt_grid表格组件源码反编译公开
- 联通亲情1+ RG100A-AA无线猫固件下载
- 三星1660打印机清零软件:一键操作解决方案
- 海康视频卡二次开发源码:多视频窗口自由拖放功能
- 新浪云上传工具:打造免费网站的利器
- APR实用工具库1.4.1版本发布
- Axis2 Webservice与苹果集成开发实践教程
- Intel SSD Toolbox 3.0版发布:Windows下刷固件与多语言支持