startActivityForResult() 废弃, 该如何改
时间: 2024-06-15 18:09:02 浏览: 231
startActivityForResult过时.md
在Android开发中,startActivityForResult()方法已经被废弃,推荐使用新的API来替代它。可以使用以下两种方式来实现类似的功能:
1. 使用ActivityResultContracts API:
从AndroidX库的1.3.0-alpha02版本开始,推荐使用ActivityResultContracts API来处理Activity之间的结果传递。这个API提供了一组预定义的合同,可以简化代码并提高可读性。
示例代码如下:
```java
// 在调用方Activity中
ActivityResultLauncher<Intent> launcher = registerForActivityResult(
new StartActivityForResult(),
result -> {
if (result.getResultCode() == Activity.RESULT_OK) {
// 处理结果
Intent data = result.getData();
// ...
}
}
);
Intent intent = new Intent(this, TargetActivity.class);
launcher.launch(intent);
// 在目标Activity中
Intent resultIntent = new Intent();
// 设置结果数据
// ...
setResult(Activity.RESULT_OK, resultIntent);
finish();
```
2. 使用新的ActivityOptions API:
另一种替代方法是使用ActivityOptions API来启动目标Activity,并在目标Activity中通过setResult()方法返回结果。
示例代码如下:
```java
// 在调用方Activity中
Intent intent = new Intent(this, TargetActivity.class);
startActivityForResult(intent, requestCode, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
// 在目标Activity中
Intent resultIntent = new Intent();
// 设置结果数据
// ...
setResult(Activity.RESULT_OK, resultIntent);
finish();
```
阅读全文