onActivityResult 已弃用,是否有替代方案(KOTLIN)

问题描述 投票:0回答:3

目前我正在为我的大学做一个项目,我发现 onActivityResult 已被弃用。可以做些什么来处理它?

这是困扰我的代码

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
            val result = CropImage.getActivityResult(data)
            if (resultCode == RESULT_OK) {
                image = result.uri
                Glide.with(this).load(image).into(binding.imgPick)
            } else {
                Snackbar.make(
                    binding.root,
                    "Image not selected",
                    Snackbar.LENGTH_SHORT
                ).show()
            }
        }

    }

我试图在 stackoverflow 上找到一个解决方案,并且已经尝试实现了一些东西,但没有成功。

android android-studio android-fragments android-activity onactivityresult
3个回答
0
投票

您可以使用以下方式:

fun openActivityForResult() {
        startForResult.launch(Intent(this, AnotherActivity::class.java))
    }


    val startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { 
    result: ActivityResult ->
        if (result.resultCode == Activity.RESULT_OK) {
            val intent = result.data
            // Handle the Intent
            //do stuff here
        }
    }

0
投票

您可以在活动或片段中使用它。

首先定义意图结果启动器。

var picker: ActivityResultLauncher<Intent>

然后

picker = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {

            if (it.resultCode == Activity.RESULT_OK && it.data != null) {

               //add your code here
            }
        }

现在启动您的活动。

 val intent = Intent(context, ImagePickerActivity::class.java)
        picker.launch(intent)

0
投票

如果你想探索更多,这里有一个库

如果你使用协程,你希望像这样同步。

val activityResult: ActivityResult = TedOnActivityResult.with().startActivityForResult(intent)

如果你使用 RxJava,你想要像这样链接。

 AA()
  .filter(...)
  .subscribeOn(...)
  .observeOn(...)
  .subscribe(...);
© www.soinside.com 2019 - 2024. All rights reserved.