在片段中区分创建调用的第一个和以下的调用

时间:2018-01-19 14:27:27

标签: android fragment-lifecycle

可能这是一个众所周知的话题,但我没有找到任何"通用"溶液

主要问题有两个:

  • fragment放到backstack时,永远不会调用onSavedInstanceState
  • 为什么无法在fragment's中实例化onCreate次观看?

此时我的问题是:由于fragment lifecycle每隔onCreateView经过resume,因为我们无法在{{1}中实例views }};为什么每次显示onCreate时我们都必须重新创建views?必须有fragment Activity中的方式。

我们可以通过添加onCreate并检查它是否有值来避免,但这意味着添加class-scoped boolean,这不是最佳解决方案。另一个解决方案可能是this one,但它也是一种解决方法,它也有一些限制。

是否有解决此问题的内置(或标准)解决方案?

1 个答案:

答案 0 :(得分:1)

我不清楚问题标题的含义 - 但我可以回答以下三点:

  

当片段放到backstack时,onSavedInstanceState永远不会被调用

保存状态时会调用

onSavedInstanceState - 只是添加到backstack并不会导致这种情况发生 - 如果有某些UI显示,则在暂停片段时会发生这种情况。实际上,解决这个问题的好答案是here (link)

  

为什么不能在onCreate中实例化片段的视图?

从活动的onPostResume方法恢复片段,此时只能安全地触摸片段的视图。 (在片段内部,您可以使用onViewsCreated

  

为什么我们必须在每次显示片段时重新创建视图

这可以通过保留您的片段实例来避免(尽管有drawbacks)。您可以使用以下方式保留:

setRetainInstance(true)