ActivityResultLauncher(活动结果启动器)是 Android 中用于启动活动并接收结果的新 API。它是在 AndroidX 框架中引入的,用于简化之前使用 startActivityForResult()方法的流程。
在使用 ActivityResultLauncher 之前,你需要选择适当的合同(contract),例如 StartActivityForResult合同,然后通过registerForActivityResult()方法创建一个ActivityResultLauncher对象。这个对象负责启动活动并在活动完成后接收结果。
// 在Activity1中调用
// 创建ActivityResultLauncher对象
ActivityResultLauncher<Intent> activityResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
public void onActivityResult(ActivityResult result) {
if (result.getResultCode() == Activity.RESULT_OK) {
// 处理成功的结果
Intent data = result.getData();
// 处理 data 中的数据
} else {
// 处理取消或失败的情况
}
}
});
// 启动Activity并等待结果
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
activityResultLauncher.launch(intent);
// 在Activity2中调用
// 设置Result数据
Intent resultData=new Intent();
setResult(12345,resultData);
// Activity关闭时,Result数据才会被返回
SecondActivity.this.finish();
下面展示被取代的 startActivityForResult()方法
// 在Activity1中调用
// 重写onActivityResult方法用于接收Result数据
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==2333&&resultCode==12345){
//处理返回数据data
}
}
// 使用startActivityForResult方法启动Activity
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
startActivityForResult(intent,2333);
// 在Activity2中调用
// 设置Result数据
Intent resultData=new Intent();
setResult(12345,resultData);
// Activity关闭时,Result数据才会被返回
SecondActivity.this.finish();
tag:ActivityResultLauncher ,ActivityResultContracts,ActivityResultCallback,result,Intent,startActivityForResult,startActivity,活动,activity,Result