6

在我的活动中,我有一个lateinit名为controller我的片段使用的属性。此属性在 中初始化Activity.onCreate()。myFragment将其引用返回到 my Activitythrough onAttach()。然后Fragment调用。myActivity.controller_Fragment.onCreate()

通常controller首先在 中初始化Activity.onCreate(),然后Fragment添加 。所以这很好用。

但是当 myActivity被杀死时,它会尝试重新创建自己及其碎片。这导致在初始化发生之前Fragment.onCreate()被调用。Activity.onCreate()

这些是我现在看到的选项:

  • controller之前初始化super.onCreate()(如果可能的话)
  • 将调用移至myActivity.controller稍后的生命周期回调,如onViewCreated()
  • ::controller.isInitializedKotlin 1.2中可用的东西

我在这里最好的选择是什么?

4

2 回答 2

5

通过回顾Fragment生命周期,实际上最安全的一点就是这样做#onActivityCreated(android.os.Bundle)

即使#onAttach()看起来像在Fragment附加到时调用它Activity,我不确定这是否完全保证,因为旧#onAttach(android.app.Activity)的已被弃用,而#onAttach(android.content.Context)建议使用新的。

于 2018-01-05T11:40:46.000 回答
0

处理在初始化之前使用对象的这种情况的最佳方法是检查 isInitialized() 属性,然后使用它。

于 2018-01-07T03:56:44.130 回答