0

旋转设备后,我们在 backstack 或 fragmentSupportManager 中的任何片段都会激活 onSaveInstanceState。

但是,在第一次旋转之后,里面的所有内容都是空的(所有变量),应用程序崩溃并出现空指针异常。

我想知道为什么如果片段实际上被破坏为空(所有值都为空),为什么片段仍然存在并且 onSaveInstanceState 被调用?

我的代码很深,有多个基类和演示者类,可以从片段中提取大量代码。我也只使用一个 Activity 并使用 fragmentTransaction.replace。

如果人们需要,我可以添加代码,但是有很多!我希望关于 backstack 的工作方式/保留它的片段的方式有一些明显的或我不理解的东西。

我看过的没有帮助的链接是

onSaveInstanceState 会在后栈中的 Fragment 上被调用吗?
一劳永逸,如何正确地将 Fragments 的实例状态保存在后堆栈中?
将 onSaveInstanceState 与 backstack 中的片段一起使用?
BackStack Fragments 旋转时为空白
将片段的状态保存在 backstack 中

4

1 回答 1

0

我有完全一样的问题。假设我有 Frag A,调用 Frag B 当我从 Frag A 到 Frag B 时,Frag A 存在于 backstack 上并且没有显示。在 Frag B 中,在第一次旋转时onSavedInstanceState(),Frag A 被调用并且工作正常,因为后堆栈上的 Frag A 存在并且所有数据都在那里。当我在 Frag B 中再次旋转设备时,Frag AonSavedInstanceState()由于某些未知原因再次调用.. 在这些调用之间,从未发出恢复,因为由于 Frag A 不可见,尚未调用 onCreateView。为什么这样做我有0线索。

我所做的是检查 Bundle 是否为空(并且 bundle 在第二次旋转后确实存在,它只是空的),如果是,我尝试从头开始重新创建 Frag,这意味着从请求中重新加载新数据......这是不是最好的解决方案..

于 2015-07-30T02:35:21.850 回答