我有一个主要 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/