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

dum*_*azy 6 android android-fragments kotlin kotlin-lateinit

在我的Activity中,我有一个lateinit名为controllerFragment使用的属性.此属性已初始化Activity.onCreate().我Fragment得到它的参考回到我Activity通过onAttach().在Fragment随后调用myActivity.controllerFragment.onCreate().

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

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

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

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

这是我最好的选择?

Xav*_*ana 5

通过回顾Fragment生命周期,事实上最安全的做法就是#onActivityCreated(android.os.Bundle).

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