【发布时间】:2018-01-08 05:43:51
【问题描述】:
在我的 Activity 中,我有一个名为 controller 的 lateinit 属性,我的 Fragment 使用该属性。
此属性在Activity.onCreate() 中初始化。我的Fragment 通过onAttach() 将其引用返回到我的Activity。然后Fragment 在Fragment.onCreate() 中调用myActivity.controller。
通常controller首先在Activity.onCreate()中初始化,然后添加Fragment。所以这很好用。
但是当我的Activity 被杀死时,它会尝试重新创建自己及其碎片。这会导致在Activity.onCreate() 中进行初始化之前调用Fragment.onCreate()。
这些是我现在看到的选项:
- 在
super.onCreate()之前初始化controller(如果可能的话) - 将对
myActivity.controller的调用移至稍后的生命周期回调,如onViewCreated() -
::controller.isInitialized在 Kotlin 1.2 中可用
我最好的选择是什么?
【问题讨论】:
-
用
by lazy { /* initialization code */ }怎么样? -
@XavierRubioJansana 这实际上解决了我的崩溃问题,但我认为这不是解决此问题的通用方法。
标签: android android-fragments kotlin kotlin-lateinit