如何使用onActivityResult代替startActivityForResult
时间: 2024-01-09 09:42:56 浏览: 99
在Android的新版本中,推荐使用registerForActivityResult方法代替旧的startActivityForResult方法。
示例:
在Activity中:
```
// 定义一个ActivityResultLauncher
ActivityResultLauncher<Intent> launcher;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化ActivityResultLauncher
launcher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
result -> {
// 处理返回结果
if (result.getResultCode() == RESULT_OK) {
Intent data = result.getData();
// 处理返回的数据
}
});
}
// 启动Activity
public void startOtherActivity() {
Intent intent = new Intent(this, OtherActivity.class);
// 启动Activity
launcher.launch(intent);
}
```
在Fragment中:
```
// 定义一个ActivityResultLauncher
ActivityResultLauncher<Intent> launcher;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 初始化ActivityResultLauncher
launcher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
result -> {
// 处理返回结果
if (result.getResultCode() == RESULT_OK) {
Intent data = result.getData();
// 处理返回的数据
}
});
}
// 启动Activity
public void startOtherActivity() {
Intent intent = new Intent(getActivity(), OtherActivity.class);
// 启动Activity
launcher.launch(intent);
}
```
在上述示例中,我们使用registerForActivityResult方法创建了一个ActivityResultLauncher,然后调用launcher.launch(intent)启动Activity,并在回调方法中处理返回的结果。
阅读全文