区分 first 中 onCreateView 的调用 first vs followings

Distinguish first vs followings onCreateView's call in fragment

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

主要问题有两个:

此时我的问题是:由于 fragment lifecycleresume 经历一次 onCreateView,并且我们无法在 [=14] 中实例化 views =];为什么每次显示 fragment 时我们都必须重新创建 views?必须有一种方法,如 ActivityonCreate

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

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

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

When a fragment is put to backstack, onSavedInstanceState is never called

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

Why can't you instantiate fragment's views in onCreate?

片段是从Activity的onPostResume方法中恢复的,只有此时你才能安全地接触片段的视图。 (在片段中你可以使用 onViewsCreated

why do we have to re-create views every time the fragment is shown

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

setRetainInstance(true)