在重新创建活动时未初始化lateinit属性

时间:2018-01-05 11:06:13

标签: android android-fragments kotlin kotlin-lateinit

在我的Activity中,我有一个名为lateinit的{​​{1}}属性,我的Fragment使用它。 此属性在controller中初始化。我的Activity.onCreate()通过Fragment将其引用回到我的ActivityonAttach()然后在Fragment中调用myActivity.controller

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

但是当我的Fragment被杀死时,它会尝试重新创建自己及其碎片。这会导致在Activity初始化之前将Fragment.onCreate()称为

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

  • Activity.onCreate()之前初始化controller(如果可能的话)
  • super.onCreate()的呼叫转移到以后的生命周期回调,myActivity.controller
  • Kotlin 1.2中提供onViewCreated()的内容

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

2 个答案:

答案 0 :(得分:5)

通过审核Fragment lifecycle,事实上最安全的做法是#onActivityCreated(android.os.Bundle)

即使#onAttach()Fragment附加到Activity时调用LinkedList,我也不确定这是否完全有保障,因为旧FibonacciLinkedList不推荐使用3}},建议使用新的#onAttach(android.app.Activity)

答案 1 :(得分:0)

处理在初始化之前使用对象的场景的最佳方法是使用isInitialized()属性进行检查,然后使用它。