Android: onActivityResult在多个Activity中被重写怎么处理?
Android: How to handle onActivityResult if it's overridden in multiple activitys?
在一个叫做 A 的 activity 中,它有 startActivityForResult(),这个 activity 就是打开我的照片库并选择一张图片。在同一个 activity A 中,它会覆盖 onActivityResult 以获取所选图像。
但是,我有另一个名为 B 的 activity,它恰好也覆盖了 onActivityResult 并且似乎 activity B 消耗了该结果并且由于这个问题 activity A 从未得到结果。
在不删除 B 中的 onActivityResult 的情况下,我可以做些什么来让结果转到 activity A 而不是 activity B?
requestCode
正是由于这个原因引入的。
在为结果启动 activity 时始终需要传递 requestCode
:
val selectImageIntent = /* some intent to select an image */
startActivityForResult(selectImageIntent, REQUEST_CODE_SELECTED_IMAGE)
您可以使用它来确定此结果是否适合您:
private val REQUEST_CODE_SELECTED_IMAGE = 1000
private val REQUEST_CODE_CAMERA = 2000
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if(requestCode == REQUEST_CODE_SELECTED_IMAGE){
// Handle the result of REQUEST_CODE_SELECTED_IMAGE
} else {
// Let another activity handle the result
super.onActivityResult(requestCode, resultCode, data)
}
}
在一个叫做 A 的 activity 中,它有 startActivityForResult(),这个 activity 就是打开我的照片库并选择一张图片。在同一个 activity A 中,它会覆盖 onActivityResult 以获取所选图像。
但是,我有另一个名为 B 的 activity,它恰好也覆盖了 onActivityResult 并且似乎 activity B 消耗了该结果并且由于这个问题 activity A 从未得到结果。
在不删除 B 中的 onActivityResult 的情况下,我可以做些什么来让结果转到 activity A 而不是 activity B?
requestCode
正是由于这个原因引入的。
在为结果启动 activity 时始终需要传递 requestCode
:
val selectImageIntent = /* some intent to select an image */
startActivityForResult(selectImageIntent, REQUEST_CODE_SELECTED_IMAGE)
您可以使用它来确定此结果是否适合您:
private val REQUEST_CODE_SELECTED_IMAGE = 1000
private val REQUEST_CODE_CAMERA = 2000
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if(requestCode == REQUEST_CODE_SELECTED_IMAGE){
// Handle the result of REQUEST_CODE_SELECTED_IMAGE
} else {
// Let another activity handle the result
super.onActivityResult(requestCode, resultCode, data)
}
}