【问题标题】:Fragment creation in onCreate?onCreate 中的片段创建?
【发布时间】:2013-08-01 09:08:05
【问题描述】:

我正在阅读 Android 编程,书中说:

一个活动 onCreate 完全有可能在它仍然与先前创建的片段相关联时被调用。每当调用 onCreate 方法时只需添加一个新片段就会泄漏片段。为了防止这种情况发生,示例代码使用了片段管理器的标记和位置功能。

代码是:

super.onCreate( state); 
setContentView( R.layout.main); 
FragmentManager fragMgr = getFragmentManager(); 
FragmentTransaction xact = fragMgr.beginTransaction(); 
if (null = = fragMgr.findFragmentByTag( FRAG1_TAG)) { 
   xact.add( R.id.date_time, new DateTime(), FRAG1_TAG); 
} 
xact.commit();

有人可以解释为什么在 onCreate 中需要这样做吗?

我认为片段生命周期总是依赖于活动的生命周期,并且活动中的 onCreate 总是在活动创建时被调用(即它总是死的)。

因此,如果片段生命周期与 Activity 相关联,那么当 Activity 死亡时,不应该所有片段都死亡,因此在 Activity 中调用 onCreate 时片段将始终为空?

是否有例外或有人可以解释为什么我的想法不正确(我实际上认为它不正确但不知道为什么?)

【问题讨论】:

  • 片段将被Activity 销毁,但FragmentManager 会记住它们(除非您完全完成活动)。现在,如果重新创建活动(例如在配置更改之后)FragmentManager 需要恢复任何以前提交的片段,这就是为什么您检查片段是否已经在FragmentManager 中。如果它在那里,则中止事务,否则会以两个片段结束(您刚刚实例化的新片段和FragmentManager 记住的旧片段)。
  • 好的,这正是我想要的。所以生命周期与我猜想的活动相关,但 FragmentManager 仍然记得 Fragment 的实例。有道理。
  • 您可以将其发布为答案,以便我将其标记为已接受吗?

标签: android android-fragments android-activity android-fragmentactivity


【解决方案1】:

碎片将被Activity 销毁,但FragmentManager 会记住它们,除非您完全完成Activity。如果 Activity 由于配置更改而被杀死,然后重新创建 FragmentManager 需要恢复任何以前提交的片段。这就是您检查Fragment 是否不在FragmentManager 中的原因。如果它在那里,则中止事务,否则会以两个片段结束(您刚刚创建的新片段和FragmentManager 记住的旧片段,它将恢复)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多