startActivityForResult(...) 立即返回 0
Posted
技术标签:
【中文标题】startActivityForResult(...) 立即返回 0【英文标题】:startActivityForResult(...) immediately returns 0 【发布时间】:2016-03-10 14:23:23 【问题描述】:当我在 Samsung 上调用 startActivityForResult(new Intent(getActivity(), VkAuth.class), VK_ID);
(在 HTC 和 Nexus 上一切正常)时,在创建 VkAuth Activity 之前调用带有 requestCode == VK_ID 和结果代码 0(已取消)的 onActivityResult
。
父活动有android:launchMode="singleInstance"
。 startActivityForResult
是从附加到父 Activity 的 Fragment 调用的。
日志
E/AuthenticationFragment: vkLogIn
E/AuthenticationFragment: startActivityForResult 9101
E/AuthenticationFragment: onPause
E/MainActivity: onPause
E/MainActivity: onActivityResult before super: request - 271245, result - 0
E/AuthenticationFragment: request - 9101, result - 0
E/MainActivity: onActivityResult after super: request - 271245, result - 0
E/AuthenticationFragment: onPause
E/MainActivity: onPause
E/VkAuth: onCreate
E/VkAuth: onResume
【问题讨论】:
你在 logcat 上看到什么可疑的东西了吗? @pskink 没什么,活动和片段调用 onPause 然后 onActivityResult 结果为 0 顺便说一句,这是您的活动(被称为活动)吗? 【参考方案1】:我在运行 Android 4.4.2 API 17 的三星 Galaxy S4 上遇到了类似的行为。 我开始了一个活动:
Intent intent = new Intent(this, MyActivity.class);
startActivityForResult(intent, CUSTOM_CODE);
但是onActivityResult
立即被resultCode=0
(ACTIVITY.RESULT_CANCELED
) 调用。它在其他设备上运行良好。
根据@Yarh 所说,我查看了AndroidManifest 并发现执行startActivityForResult
的Activity 具有android:launchMode="singleInstance"
。
删除此行肯定会解决问题。
【讨论】:
【参考方案2】:在我删除了 android:launchMode="singleInstance" 之后,这种不当行为就停止了
【讨论】:
只是浪费了几个小时试图调试这个问题,这个答案肯定解决了这个问题!【参考方案3】:您没有发布足够的代码让我们真正了解发生了什么,但我会检查以下内容:
当你从刚刚启动的活动返回时使用startActivityForResult
,请检查你是否有setResult
到RESULT_OK
:
Intent returnIntent = new Intent();
setResult(RESULT_OK, returnIntent);
【讨论】:
cancell在startActivityForResult之后returned,但是before
的activity竟然被创建了,所以不是setResult错位的点以上是关于startActivityForResult(...) 立即返回 0的主要内容,如果未能解决你的问题,请参考以下文章
Fragment的startActivityForResult和Activity的startActivityForResult的区别
如何在 onActivityResult 中调用 startActivityForResult?
startActivityForResult和setResult详解