我有一个主Activity,它作为一个入口点,可以根据情况调用不同的Activity。其中,我使用Firebase Auth来管理用户登录:
startActivityForResult(
AuthUI.getInstance().createSignInIntentBuilder()
.setAvailableProviders(providers)
.build(),
RC_SIGN_IN)
我覆盖onActivityResult()
以区分返回的intent/data,例如:
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 Result API,我知道我应该在ActivityResultLauncher
之前创建prepareCall()
,并确保Activity在启动时处于已创建状态,但我仍然不明白如何像onActivityResult()
那样优雅地处理多个Activity结果(至少在一个位置)。
看一下this article,我似乎需要实现ActivityResultContract
类型的 * 多个 * 子内部类(因此是多个prepareCall()
?),因为它们应该是不同的 * 契约 *,我说的对吗?有人能给我一些反映上述onActivityResult()
逻辑的框架示例吗?
7条答案
按热度按时间ttvkxqim1#
您可以根据需要调用任意多个"活动"以获取结果,并为每个活动设置单独的回调:
您只需要指定活动类-
CameraCaptureActivity::class.java
在活动1.2.0-alpha04与片段1.3.0-alpha04中,prepareCall()方法已被重命名为registerForActivityResult()。并且在最后一行中,它应该是startForResult. launch(...)
jxct1oxe2#
从现在起,
startActivityForResult()
已被弃用,因此请使用new方法代替。cuxqih213#
ActivityResultContract<I, O>
的抽象类来创建结果契约。I表示输入类型,O表示输出类型。然后,您只需要覆盖2个方法 *Activity
。您需要将自定义合约和回调传递到registerForActivityResult
。*有关更多信息,请查看此Post
g9icjywg4#
在本例中,AuthUI返回的内容已经是Intent,因此,我们像下面的示例一样使用它。
使用以下命令从任意位置(例如单击按钮)启动活动:
ikfrs5lh5#
如果从片段启动Activity并将结果返回给片段,请执行以下操作。
片段:
活动中:
nnsrf1az6#
更多详情请参见:https://githubmemory.com/repo/firebase/FirebaseUI-Android/issues?cursor=Y3Vyc29yOnYyOpK5MjAyMS0wMy0wNVQyMjoxNzozMyswODowMM4xEAQZ&pagination=next&page=2
fcipmucu7#
将其用于Firebase AuthUI;
像这样。