在Fragment 和 Activiiy之间进行调用,,,代替原来的StartActiviForResult,因为这个方式会把所有的回调结果都放在这一个方法里,会导致这一块代码逻辑复杂,代码冗长,不便阅读。
在的Result API方式中,我们可以根据自己的需求自定义协议,让每一个协议只做对应的一件事,让代码更加清晰。
自定义协议方式使用:
1.添加依赖
implementation 'androidx.activity:activity:1.2.0-beta01'
implementation 'androidx.fragment:fragment:1.3.0-beta01‘
2.定义协议
3.注册协议获取ActivityResultLauncher
4.用ActivityResultLauncher.launch()启动页面跳转
直接使用Google预定义的协议,如Activity
1.根据具体需求注册协议获取ActivityResultLauncher如
private final ActivityResultLauncher<Intent> myResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if(result.getResultCode() == Activity.RESULT_OK){//如果是一类任务的结果回调,可用if再进行逻辑处理。也可以不用if
//回调执行
}
}
});
2.启动页面跳转
if(view == button){
myResultLauncher.launch(new Intent(this,SecondActivity.class));
}
3.在SecondActivity中
setResult(RESULT_OK); //如果回调方法中没有加判断,可以什么都不做。