3

可能这是一个众所周知的话题,但我没有找到任何“通用”的解决方案。

主要问题有两个:

  • 当 afragment被放入时backstackonSavedInstanceState永远不会被调用
  • 为什么不能实例化fragment's视图onCreate

在这一点上,我的问题是:因为fragment lifecycle经历了onCreateViewevery resume,并且因为我们不能实例viewsonCreate; 为什么views每次fragment显示时我们都必须重新创建?必须有一种方法,如Activitywith onCreate

我们可能会通过添加 aclass-scoped boolean并检查它是否有值来避免,但这意味着添加 anif并且这不是最好的解决方案。另一种解决方案可能是这个,但它也是一种解决方法,它也有一些限制。

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

4

1 回答 1

1

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

当一个片段被放入 backstack 时,永远不会调用 onSavedInstanceState

onSavedInstanceState在保存状态时调用 - 只是添加到后台堆栈不会导致这种情况发生 - 如果有一些 UI 显示,它会在暂停片段时发生。实际上,这里存在一个解决此问题的好答案(链接)

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

一个fragment是从一个Activity的方法中恢复过来的onPostResume,此时才能安全的触摸到一个fragment的view。(在您可以使用的片段内onViewsCreated

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

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

setRetainInstance(true)
于 2018-01-19T14:39:37.133 回答