You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中Activity Result Launcher处理RESULT_CANCELLED问题求助

解决Activity Result Launcher处理RESULT_CANCELLED的问题

1. 正确注册Activity Result Launcher

必须使用ActivityResultContracts.StartActivityForResult()这个通用Contract来注册,它能处理包括RESULT_CANCELLED在内的所有结果码。示例代码:

// 在宿主Activity的onCreate方法中完成注册
private val activityResultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
    val resultTv = findViewById<TextView>(R.id.tv_result)
    when (result.resultCode) {
        Activity.RESULT_OK -> {
            // 处理成功返回的逻辑
            val content = result.data?.getStringExtra("EXTRA_CONTENT") ?: "无返回数据"
            resultTv.text = "操作成功:$content"
        }
        Activity.RESULT_CANCELLED -> {
            // 这里就是你需要的取消结果处理逻辑
            resultTv.text = "操作已取消"
        }
    }
}

2. 启动目标Activity的正确方式

直接通过Launcher的launch方法传入Intent即可,无需额外处理:

findViewById<Button>(R.id.btn_start_activity).setOnClickListener {
    val intent = Intent(this, TargetActivity::class.java)
    activityResultLauncher.launch(intent)
}

3. 目标Activity返回RESULT_CANCELLED的写法

  • 系统默认行为:用户按返回键时,目标Activity会自动返回RESULT_CANCELLED,无需额外代码。
  • 手动触发取消:如果需要通过按钮主动返回取消状态,代码如下:
findViewById<Button>(R.id.btn_cancel).setOnClickListener {
    setResult(Activity.RESULT_CANCELLED)
    finish()
}

常见错误排查

  • 不要在返回RESULT_CANCELLED时强行给Intent赋值额外数据,这完全没必要,反而可能干扰逻辑。
  • 禁止在点击事件等动态场景重复注册Launcher,必须在onCreate等生命周期方法中一次性完成注册。
  • 如果重写了目标Activity的onBackPressed方法,要确保调用setResult(Activity.RESULT_CANCELLED)后再执行finish(),否则会丢失结果码。

内容的提问来源于stack exchange,提问作者P47HF1ND3R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 14:18:17