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

Android Fragment的onActivityResult在目标Activity结束后未触发求助

问题根因定位及解决方案

1. 排查宿主Activity父类的onActivityResult实现

  • 你提到LoginContainerActivity本身未重写onActivityResult,请确认它的父类(比如BaseActivity)有没有重写该方法,且重写时是否调用了super.onActivityResult(requestCode, resultCode, data)。如果父类重写但未调用super,系统不会自动分发回调给绑定的Fragment。
  • 修复方案:在BaseActivity的onActivityResult中补充super调用即可。

2. 确认Fragment的包路径一致性

  • 如果你使用的是AndroidX库,请确保BaseLoginFragment继承的是androidx.fragment.app.Fragment,而非废弃的android.app.Fragment,同时宿主Activity必须继承自androidx.appcompat.app.AppCompatActivity,否则会出现回调分发不兼容的问题。
  • 修复方案:统一Fragment和Activity的依赖包路径。

3. 检查requestCode的取值范围

  • 原生Android系统要求startActivityForResult传入的requestCode必须是小于0xFFFF(即65535)的正整数,如果你定义的REQ_CODE_TRANSACTION_PASSWORD_EXPIRED取值超过该范围,系统会丢弃回调。
  • 修复方案:将requestCode调整为小于65535的数值。

4. 排查Activity启动模式和启动Flag

  • 你提供的Manifest配置中未包含ChangeFirstLoginPasswordActivity的注册信息,请补充检查该Activity的配置:
    • 如果设置了android:launchMode="singleTask"/singleInstance,或者启动Intent添加了FLAG_ACTIVITY_NEW_TASK标记,会导致系统无法将结果回调给发起请求的Fragment。
    • 另外检查LoginContainerActivity的launchMode,如果设置为singleTask,跳转返回时会重建宿主实例,原有Fragment的回调自然无法触发。
  • 修复方案:移除目标Activity的特殊启动模式和NewTask标记,宿主Activity如果必须用singleTask,建议改为用Activity Result API替代原有方案。

5. 确认setResult调用的线程和时机

  • 你当前的setResult逻辑写在Observer回调中,请确认该回调是在主线程执行,如果在子线程调用setResult+finish,可能会出现结果未被系统正确保存的问题。
  • 修复方案:如果回调在子线程,通过runOnUiThread切换到主线程再执行setResult和finish操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:06:03