区分 first 中 onCreateView 的调用 first vs followings
Distinguish first vs followings onCreateView's call in fragment
可能这是一个众所周知的话题,但我没有找到任何 "universal" 解决方案。
主要问题有两个:
- 当
fragment
被放入 backstack
时,onSavedInstanceState
永远不会被调用
- 为什么不能在
onCreate
中实例化 fragment's
视图?
此时我的问题是:由于 fragment lifecycle
每 resume
经历一次 onCreateView
,并且我们无法在 [=14] 中实例化 views
=];为什么每次显示 fragment
时我们都必须重新创建 views
?必须有一种方法,如 Activity
和 onCreate
。
我们可能会通过添加一个 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)
可能这是一个众所周知的话题,但我没有找到任何 "universal" 解决方案。
主要问题有两个:
- 当
fragment
被放入backstack
时,onSavedInstanceState
永远不会被调用 - 为什么不能在
onCreate
中实例化fragment's
视图?
此时我的问题是:由于 fragment lifecycle
每 resume
经历一次 onCreateView
,并且我们无法在 [=14] 中实例化 views
=];为什么每次显示 fragment
时我们都必须重新创建 views
?必须有一种方法,如 Activity
和 onCreate
。
我们可能会通过添加一个 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)