【发布时间】:2019-09-10 05:28:45
【问题描述】:
我在下面创建了一个简单的应用程序
MainActivity -> ContainerFragment -> MainFragment
ContainerFragment 使用replace 提交 MainFragment。
我打开不保持Activity`
当 MainFragment 调用 startActivityForResult 并从活动返回时,onActivityResult 不会被调用。
这种情况不会发生
- 它是一个片段。 (未嵌套)
Don't Keep Activity已关闭- 当 ContainerFragment 使用
add提交 MainFragment 时。
要复制问题,请下载以下 github 中的代码并运行它。 (记得开启Don't Keep Activity)。点击Start Activity..,然后点击End Activity,期待一个Toast(没有Toast,说明片段中的onActivityResult没有被调用)
https://github.com/elye/issue_android_onactivityresult_not_called
显然之前在https://stackoverflow.com/a/36239436/3286489 中发布过一个报告的嵌套Fragment 无法获取onActivityResult,但声明已在Android 支持库23.2.1 中解决。但就我而言,我尝试了 Android Support Library 28 (Android Pie)。所以我相信这仍然是一个有效的问题。
在这里分享一下,以防我错了,那里有一些解释。
以防万一,https://inthecheesefactory.com/blog/how-to-fix-nested-fragment-onactivityresult-issue/en 推荐了一种解决方法。
报告的另一种解决方法 https://stackoverflow.com/a/20543245/3286489
【问题讨论】:
-
您希望调用片段的
onActivityResult还是调用活动的onActivityResult? -
Fragment 中的
onActivityResult尽管预期没有被调用。它在 Activity 的onActivityResult中调用,但没有匹配的requestCode。 -
如果你想拥有正确的
resultCode在片段中使用activity.startActivityForResult -
不,我们希望在触发(嵌套)片段中调用
onActivityResult(使用replace操作提交)。它在Don't Keep Activity关闭时有效,但在打开时无效。 -
发现即使在AndroidX中它仍然是一个错误issuetracker.google.com/issues/130327691