【startactivityforresult】在Android开发中,`startActivityForResult` 是一个非常常见的方法,用于从一个Activity跳转到另一个Activity,并期望返回结果。这个方法在需要用户进行选择、输入信息或执行某些操作后返回数据时非常有用。
一、总结
功能 | 描述 |
方法名称 | `startActivityForResult(Intent intent, int requestCode)` |
主要用途 | 启动另一个Activity并等待返回结果 |
参数说明 | `Intent` 用于传递数据,`requestCode` 用于标识请求来源 |
返回结果 | 使用 `setResult(int resultCode, Intent data)` 设置结果 |
结果处理 | 在 `onActivityResult(int requestCode, int resultCode, Intent data)` 中接收结果 |
二、使用流程
1. 启动目标Activity
- 调用 `startActivityForResult()` 方法,传入一个 `Intent` 和一个请求码(requestCode)。
2. 目标Activity处理逻辑
- 在目标Activity中完成操作后,调用 `setResult()` 方法设置返回结果。
- 最后调用 `finish()` 结束当前Activity。
3. 返回原Activity并处理结果
- 原Activity的 `onActivityResult()` 方法会被调用,通过 `requestCode` 和 `resultCode` 判断是否是自己发起的请求,并从中获取返回的数据。
三、示例代码
1. 启动Activity
```java
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivityForResult(intent, 100);
```
2. 目标Activity中设置返回结果
```java
Intent resultIntent = new Intent();
resultIntent.putExtra("result", "Hello from SecondActivity");
setResult(RESULT_OK, resultIntent);
finish();
```
3. 处理返回结果
```java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 100 && resultCode == RESULT_OK) {
String result = data.getStringExtra("result");
Toast.makeText(this, "Received: " + result, Toast.LENGTH_SHORT).show();
}
}
```
四、注意事项
- `requestCode` 必须唯一,用于区分不同的请求来源。
- `onActivityResult()` 是回调方法,必须重写才能接收到结果。
- 如果不需要返回结果,可以直接使用 `startActivity()`,无需 `startActivityForResult()`。
- 从 Android 11 开始,部分系统对 `startActivityForResult` 的使用进行了限制,建议结合 `ActivityResultLauncher` 使用。
五、对比 `startActivityForResult` 与 `ActivityResultLauncher`
特性 | `startActivityForResult` | `ActivityResultLauncher` |
适用版本 | 早期版本(API < 30) | Android 11 及以上 |
使用方式 | 通过 `onActivityResult()` 回调 | 通过 `registerForActivityResult()` 注册 |
灵活性 | 较低 | 更高,支持更复杂的交互 |
推荐使用 | 旧项目维护 | 新项目推荐使用 |
六、结论
`startActivityForResult` 是 Android 中实现 Activity 间通信的一种经典方式,适用于简单的返回数据场景。虽然随着 Android 版本更新,官方推荐使用 `ActivityResultLauncher`,但了解和掌握 `startActivityForResult` 仍然是 Android 开发者必备技能之一。