android - 如何用活动结果 API 替换 startActivityForResult?
问题描述
我有一个主要活动作为调用不同活动的入口点,具体取决于条件。其中,我使用 Firebase Auth 来管理用户登录:
startActivityForResult(
AuthUI.getInstance().createSignInIntentBuilder()
.setAvailableProviders(providers)
.build(),
RC_SIGN_IN)
我覆盖onActivityResult()
以区分返回的意图/数据,例如:
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
}
// ...
}
}
使用文档强烈推荐的活动结果 API ,我知道我应该在启动prepareCall()
之前ActivityResultLauncher
确保活动处于创建状态,但我仍然不明白如何优雅地处理多个活动结果(在至少,在一个地方)就像 in onActivityResult()
。
看这篇文章,似乎我需要实现多个类型的子内部类ActivityResultContract
(因此是多个prepareCall()
?),因为它们被认为是不同的合同,对吗?有人可以给我看一些反映上述onActivityResult()
逻辑的骨架示例吗?
解决方案
您可以根据需要为结果调用任意数量的活动,并为每个活动单独回调:
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的更新
推荐阅读
- javascript - 无法将样式应用于 javascript 中动态创建的元素
- python - 没有使用烧瓶 send_from_directory 的下载对话框窗口
- html - Html Css删除图像和p之间的距离
- python - 如何随机化密码生成器的字符顺序
- python - 具有扩展属性的深色主题
- laravel - 为 Laravel 模型添加属性
- git - 如何在 Git Bash 中初始化 Composer 项目?
- ruby-on-rails - 如何让引导组件在使用rails的ajax之后打开?
- docker - docker工作目录和singularity的区别
- excel - 我想创建一个以管理员权限运行 .xlsm 文件的 .vbs 文件