【问题标题】:Can onViewCreated be called before Activity onCreate finishes?可以在 Activity onCreate 完成之前调用 onViewCreated 吗?
【发布时间】:2017-03-24 04:42:51
【问题描述】:

我正在尝试重新设计一些片段以从 onAttach 和 onActivityCreated 覆盖中删除依赖项,而是稍后在 onViewCreated 覆盖中查找 Activity。

在 Android 应用程序生命周期中是否存在在 Activity onCreate 完成之前调用片段的 onViewCreated 的情况。例如我知道:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

通常不会导致 Fragments onAttach 被调用(假设片段稍后以编程方式添加到片段管理器),但是在极少数情况下,配置更新片段管理器可以在 super.onCreate 中重新创建片段,这会导致 onAttach在活动的 onCreate 完成之前调用。

【问题讨论】:

  • "从 onAttach 和 onActivityCreated 中移除依赖项" 为什么?这样做有什么具体原因吗?
  • 因为我在那里有一个循环依赖。 Activity onCreate 初始化应用程序逻辑,该逻辑决定创建哪个片段并创建它。但在极少数情况下,Activity onCreate super.onCreate 正在重新创建片段本身(这很糟糕 - 它在任何给定点都不知道正确的片段是什么,但无论如何)。因此,在其 onAttach 中引用活动的片段正在尝试引用尚未配置的库,因为该库尚未决定使用哪个片段。
  • 我认为您在重新创建 Activity 时(例如方向更改或返回 Activity 时)会遇到此问题,其参数 Bundle savedInstanceState 非空。

标签: android android-fragments


【解决方案1】:

onCreate() 系统在创建片段时调用它。在您的实现中,您应该初始化您希望在片段暂停或停止然后恢复时保留的片段的基本组件。

onCreateView() 调用以创建与片段关联的视图层次结构。

当片段第一次绘制其用户界面时,系统会调用它。要为您的 Fragment 绘制 UI,您必须从此方法返回一个 View,它是 Fragment 布局的根。如果片段不提供 UI,则可以返回 null。

参考Fragments Life Cycle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 2015-07-29
    相关资源
    最近更新 更多