【问题标题】:Lifecycle of a fragment when startActivityForResult() is called调用 startActivityForResult() 时片段的生命周期
【发布时间】:2014-07-06 06:58:56
【问题描述】:

我有一段代码调用 startActivityForResult() 从 Android 库中选择图像。从调用 startActivityForResult() 并激活 onActivityResult() 开始,我无法理解片段的生命周期。

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

我的问题是,有没有办法从意图开始和返回时保留这些数据?我的猜测是在 onPause() 和 onResumse() 中保存它的一个实例,但我不太明白它在此事件期间的生命周期如何。

提前谢谢你!

【问题讨论】:

    标签: android fragment


    【解决方案1】:

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

    然而,另一个问题是我的变量没有保留。虽然列表被保留,因此我的列表视图保持不变,但布尔和 int 变量被重置,我还不知道有解决方案。如果有人可以提供帮助,那就太好了!

    【讨论】:

    • 听起来你需要覆盖onSaveInstanceState()
    • 我实际上已经尝试过了,但遗憾的是没有运气。我在我的片段中覆盖 onSaveInstanceState() 并将我的变量放在 outState 包中。但是,当我在 onCreateView 中检索变量时,savedInstanceState 包始终为空。有什么帮助吗?
    • 我建议检查发送到onCreate()savedInstanceState 包。
    • 我正在使用 setRetainInstance(true),因此当重新附加片段时,它会跳过 onCreate()。我也在阅读stackoverflow.com/questions/20550016/… 它说使用 setRetainInstance 的捆绑包始终为空。我现在不知道如何解决这个问题。
    • 你能从你的代码中删除setRetainInstance()吗?
    猜你喜欢
    • 2012-11-21
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多