【问题标题】:Android: How to handle onActivityResult if it's overridden in multiple activitys?Android:如果 onActivityResult 在多个活动中被覆盖,如何处理?
【发布时间】:2021-07-20 02:23:59
【问题描述】:

在一个名为 A 的活动中,它有 startActivityForResult(),这个活动只是打开我的照片库并选择一张图片。在同一个activity A中,它会覆盖onActivityResult来抓取选中的图片。

但是,我有另一个名为 B 的活动,它恰好也覆盖了 onActivityResult,并且似乎活动 B 消耗了该结果,并且由于这个问题,活动 A 永远不会得到结果。

在不删除 B 中的 onActivityResult 的情况下,我可以做些什么来让结果转到活动 A 而不是活动 B?

【问题讨论】:

  • @blackapps 抱歉,刚刚改写了。
  • 我在很多活动中都有 onActivityResults,它们从不消耗其他人的数据。请发布可重现的代码。
  • 您的onActivityResult 应该始终以调用super.onActivityResult(...) 结束,除非您确实想使用结果。

标签: java android kotlin onactivityresult


【解决方案1】:

requestCode 正是为此而引入的。 在开始活动以获得结果时,您始终需要传递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)
    }
}

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多