android - 如何用 Activity 结果 API 替换 startActivityForResult?

标签 android android-activity androidx onactivityresult

我有一个主要 Activity 作为调用不同 Activity 的入口点,具体取决于条件。其中,我使用 Firebase Auth 来管理用户登录:

startActivityForResult(
            AuthUI.getInstance().createSignInIntentBuilder()
                    .setAvailableProviders(providers)
                    .build(),
            RC_SIGN_IN)

我覆盖onActivityResult()区分返回的 Intent/数据,例如:
 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    when (requestCode) {

        REQUEST_CODE_1 -> {
          // update UI and stuff
        }

        RC_SIGN_IN -> {
          // check Firebase log in
        }
        // ...
    }
}

使用 documentation 强烈推荐的 Activity 结果 API ,我知道我应该做prepareCall()之前 ActivityResultLauncher并确保在我启动时 Activity 处于创建状态,但我仍然不明白如何优雅地处理多个 Activity 结果(至少在一个地方),如 onActivityResult() .

this article ,看来我需要实现ActivityResultContract的多个子内部类类型(因此有多个 prepareCall() 的?),因为它们被认为是不同的契约(Contract),对吗?有人可以给我看一些反射(reflect)上述内容的骨架示例onActivityResult()逻辑?

最佳答案

您可以根据需要为结果调用任意数量的 Activity ,并为每个 Activity 单独回调:

    val startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult())
    { result: ActivityResult ->
        if (result.resultCode == Activity.RESULT_OK) {
            //  you will get result here in result.data
            }

        }
    }

    startForResult.launch(Intent(activity, CameraCaptureActivity::class.java))
您只需要指定 Activity 类 - CameraCaptureActivity::class.java 更新:The prepareCall() method has been renamed to registerForActivityResult() in Activity 1.2.0-alpha04 and Fragment 1.3.0-alpha04. And it should be startForResult.launch(...) in the last line感谢 Rafael Tavares 的更新

关于android - 如何用 Activity 结果 API 替换 startActivityForResult?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61455381/

相关文章:

android - onAttachedToWindow 和 onStart 之间的确切区别是什么

Android listview edittext过滤空格按钮?

android - 在android中单击按钮时需要转到上一个 Activity

android - 适用于 Android 和 iOS 的应用程序 OpenStreetMap

java - 我可以将 Activity 转换为 float 窗口吗?

android - 迁移到 Androidx 后更改区域设置不起作用

android - 如何使用工作管理器 2.0 返回 ListenableFuture<Result>?

android - 无法在API级别29的wordpress应用中的webview中完全加载wordpress发布内容。但是在API级别26上可以正常工作

android - 如何在自定义适配器类中使用联系人填充 ListView?

Android 2.0 和 OpenGL ES 2.0 支持