android - 调用 startActivityForResult() 时 fragment 的生命周期

标签 android fragment

我有一段代码可以调用 startActivityForResult() 从 Android 画廊中挑选一张图片。从调用 startActivityForResult() 到激活 onActivityResult() 时,我无法理解 fragment 的生命周期。

我的 Activity 检索信息并将其加载到 ListView 中。然后,它允许用户通过使用 startActivityForResult() 向相机/图库应用程序发送一个 Intent 来将图片插入到 ListView 中。这部分工作完美。问题在于,当应用程序从 Intent 返回并且必须再次检索信息时,列表会丢失其数据。我已经设置了 setRetainFragment(true)。

我的问题是,有什么方法可以保留从 Intent 启动到返回的数据?我的猜测是在 onPause() 和 onResumse() 中保存它的一个实例,但我不太明白它的生命周期在此事件中是如何进行的。

提前致谢!

最佳答案

我找到了解决问题的方法。为了回答我关于生命周期的问题,该 fragment 确实经历了 onDetach()、onAttach()、onCreateView() 过程。但是,因为我设置了 onRetainInstance(true),它会跳过 onDestroy() 和 onCreate()。我的数据丢失的原因是因为我在 onCreateView() 期间检索数据,并且由于每次都调用 onCreateView(),因此检索数据也是如此。由此,我所要做的就是在检索数据之前检查列表是否为空。

然而,另一个问题是我的变量没有被保留。尽管保留了列表,因此我的 ListView 保持不变,但 bool 和 int 变量已重置,我还不知道对此有解决方案。如果有人能提供帮助,那就太好了!

关于android - 调用 startActivityForResult() 时 fragment 的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23718731/

相关文章:

android - 未显示警报对话标题和消息

android - 屏幕滚动后执行操作

java - Android 如何制作类似下雨的动画?

android - 如何在没有 XML 的情况下以编程方式将 fragment 添加到 Activity

双向滑动的 Android (Xamarin.Android) 日历

android - 如何使用 Retrofit 2 获取 API 请求/响应时间

android - 使用 (Child)FragmentManager 正确使用子子 fragment

ios - 如何从 UIWebView 获取 URL 的哈希片段

android - 从其他 fragment 更新 Listview

android - fragment 事务在 onSaveInstanceState 后隐藏