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