2012-07-21 67 views

回答

1

是的,如果他们必须保留配置更改,您可以将它用于不在回栈中的碎片。它只是让事情变得更简单。

参见https://stackoverflow.com/a/8550351/1300995

+0

我们如何保留在堆栈中维护的片段的配置更改。因为我们不能使用'setRetainInstance(true)' – Dory 2014-04-04 13:20:15

2

这并不总是好的,没有。通过保留实例,您告诉'您的旧Android可以给您一个完全相同的Fragment实例,即从未调用片段的onDestroy,而是在onAttach(ed)和onDetach(ed)上。

通常情况下,您需要重新流动视图以利用不同屏幕比例作为方向更改的结果(例如),并让您的片段保留其状态将意味着框架不会尝试使用例如,如果以肖像模式启动,您的“风景友好”视图。

onRetainInstance的影响是微妙的,它不是银弹。谨慎操作。

+0

我们如何保留维护在后端堆栈中的碎片的配置更改。因为我们不能使用'setRetainInstance(true)' – Dory 2014-04-04 13:22:16

+4

这是不正确的,即使你在片段上调用了'setRetainInstance(true)',它的'onCreateView()'方法也会被再次调用,并且因此它会再次被布局 – nbarraille 2015-08-07 03:50:09

+1

刚刚重新确认了行为,我可以看到@nbarraille指的是什么,以前当我在2012年编写这个答案的时候,如果你在onCreateView下有两个布局,在不同的资源限定符-port或-land下,那么通过使用setRetainInstance(true)将意味着起始布局将在屏幕旋转中重复使用。这似乎不再是这种情况了。请放心,以前此调用主要存在一些细微问题;请参见http://go.ie)。 /问题/ 10456077/NullPointerException异常功能于fragmentmanager / – OceanLife 2015-08-07 12:30:41

相关问题