可能这是一个众所周知的话题,但我没有找到任何“通用”的解决方案。
主要问题有两个:
- 当
fragment
被放入backstack
,onSavedInstanceState
从未被调用 - 为什么不能实例化
fragment's
浏览量onCreate
?
此时我的问题是:由于 fragment lifecycle
通过 onCreateView
每个resume
, 因为我们不能实例化 views
在onCreate
;为什么我们必须重新创建 views
每次 fragment
显示?必须有一种方法,如 Activity
与 onCreate
.
我们可以通过添加 class-scoped boolean
来避免并检查它是否有值,但这意味着添加一个 if
这不是最好的解决方案。另一个解决方案可能是 this one ,但这也是一种解决方法,但也有一些限制。
是否有解决此问题的内置(或标准)解决方案?
最佳答案
我不清楚你的问题标题的含义 - 但我可以回答以下三点:
When a fragment is put to backstack, onSavedInstanceState is never called
onSavedInstanceState
在保存状态时被调用 - 只是添加到后台堆栈不会导致这种情况发生 - 如果有一些 UI 显示,它会在暂停 fragment 时发生。实际上存在解决此问题的好答案 here (link)
Why can't you instantiate fragment's views in onCreate?
从 Activity 的 onPostResume
方法恢复 fragment ,只有此时您才能安全地接触 fragment 的 View 。 (在 fragment 中你可以使用 onViewsCreated
)
why do we have to re-create views every time the fragment is shown
这可以通过保留 fragment 实例来避免(尽管有 drawbacks )。您可以使用以下方式保留:
setRetainInstance(true)
关于android - 区分 first 中 onCreateView 的调用 first vs followings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48343284/