当前位置:   article > 正文

startActivityForResult替代方案

startactivityforresult替代

startActivityForResult过时

替代方案:ActivityResultContract

1、如何使用

1.1 定义ActivityResultContract

  1. //泛型   1-ActivityResultLauncher.launch调用时需要的参数类型
  2. //泛型   2-回调ActivityResultCallback返回类型
  3. val activityResultContract = object : ActivityResultContract<Intent, ActivityResult>() {
  4.    override fun createIntent(context: Context, input: Intent): Intent {
  5.        return input
  6.   }
  7.    override fun parseResult(resultCode: Int, intent: Intent?): ActivityResult {
  8.        return ActivityResult(resultCode,intent)
  9.   }
  10. }

1.2 定义ActivityResultCallback

  1. //页面返回回调
  2. val activityResultCallback = object : ActivityResultCallback<ActivityResult> {
  3.    override fun onActivityResult(result: ActivityResult?) {
  4.        if (result != null && result.resultCode == RESULT_OK) {
  5.            //todo
  6.       }
  7.   }
  8. }

1.3 activity或者fragment中进行注册

  1. //参数     ActivityResultContract ActivityResultCallback
  2. //返回值   ActivityResultLauncher
  3. registerForActivityResult = registerForActivityResult(activityResultContract, activityResultCallback)

1.4 ActivityResultLauncher合适时机调用

  1. //调用      
  2. registerForActivityResult?.launch(Intent(this,DetainmentActivityActivity::class.java))

2、预置实现

2.1 调用

  1. val registerForActivityResult=registerForActivityResult(ActivityResultContracts.StartActivityForResult(),object : ActivityResultCallback<ActivityResult> {
  2.            override fun onActivityResult(result: ActivityResult?) {
  3.                if (result != null && result.resultCode == RESULT_OK) {
  4.                    finish()
  5.               }
  6.           }
  7.       })
  8.        registerForActivityResult.launch(Intent(this,DetainmentActivityActivity::class.java))

2.2 StartActivityForResult代码

  1. public static final class StartActivityForResult
  2.    extends ActivityResultContract<Intent, ActivityResult> {
  3.    @NonNull
  4.    @Override
  5.    public Intent createIntent(@NonNull Context context, @NonNull Intent input) {
  6.        return input;
  7.   }
  8.    @NonNull
  9.    @Override
  10.    public ActivityResult parseResult(
  11.        int resultCode, @Nullable Intent intent) {
  12.        return new ActivityResult(resultCode, intent);
  13.   }
  14. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/886509
推荐阅读
相关标签
  

闽ICP备14008679号