android - 为什么 onActivityResult 中 Fragment 为 null

标签 android android-fragments onactivityresult activity-lifecycle

这是我的设置:

Activity -> FragmentWithPages -> ViewPager{Fragment1, Fragment2}

我从 Fragment1 启动 DialogFragment,然后从 DialogFragment 启动 ActivityForResult 以实现隐式相机拍照 Intent 。

问题:

有时,当从相机返回时,我的应用程序会在 Fragment1 的 onActivityResult 内崩溃。为什么会出现这种情况?现在了解 onActivityResult 的回调链。它将按照 Activity.onActivityResult -> FragmentWithPages.onActivityResult -> Fragment1.onActivityResult -> DialogFragment.onActivityResult 的顺序返回。所以我的问题是,为什么当我执行 mDialogFragment.onActivityResult(...)DialogFragment 为 null?

我想这可能与内存有关:系统杀死我的应用程序,然后在相机应用程序返回后重新启动它。但如果是这样的话,为什么 DialogFragment 是链中断开的链接?我该怎么做才能防止这个问题或像没有发生任何问题一样处理它?<​​/p>

所以不,我并不是想简单地捕获 NPE,这并没有多大作用,因为它会使我拍照的整个目的失效。

最佳答案

当您从 startActivityForResult() 返回时,无法保证 Activity 实例相同。系统可以自由地处理为结果而启动的 Activity,并重建它以处理 onActivityResult() 调用。

如果发生这种情况,这当然意味着您之前分配的任何实例字段将不再如此。您可以使用 onSaveInstanceState() 并使用传入 onCreate() 的已保存实例状态 Bundle 重建您的 Activity 实例。

您可以通过在设备上的开发者设置中设置“不保留 Activity ”来测试此场景。

关于android - 为什么 onActivityResult 中 Fragment 为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34346597/

相关文章:

javascript - Html 地理定位未在本地主机应用程序上请求许可?

短信中的 Android 市场链接

java - 通过单击按钮更改 fragment

android - Fragments如何影响Activity "single, focused thing that the user can do"原理?

android - Gallery intent.getData() 在 onActivityResult 中返回 null

java - 在我的代码中添加一个计时器

Android 将数据从 ListView 传递到弹出窗口

java - 无法将 fragment 类添加到我的 Android 项目

android - 新结果 API 错误 : Can only use lower 16 bits for requestCode

android - 如何在android中使用 Activity 结果来经历多个 Activity