android - 区分 first 中 onCreateView 的调用 first vs followings

标签 android fragment-lifecycle

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

主要问题有两个:

  • fragment被放入backstack , onSavedInstanceState从未被调用
  • 为什么不能实例化fragment's浏览量 onCreate

此时我的问题是:由于 fragment lifecycle通过 onCreateView每个resume , 因为我们不能实例化 viewsonCreate ;为什么我们必须重新创建 views每次 fragment显示?必须有一种方法,如 ActivityonCreate .

我们可以通过添加 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/

相关文章:

java - Android 相机在两次拍摄之间失焦

c# - Xamarin 安卓 : Cannot choose compile version

android - 如何防止在 Fragment 不可见时激活 LiveData 观察者

android - Android Oreo 8.0 中 onPause 之前调用的新 Fragment 的 onResume

java - 我正在尝试将 EC 公钥从 Android 导出到 iOS,最好的方法是什么?

java - Android:从java项目调用python代码

java - 在 ndk{} 中使用 moduleName 时如何设置 JNI 依赖?

android - fragment 被销毁后停止处理程序

java - 无法恢复 Activity IndexOutOfBoundsException : Invalid index 0, 大小为 0