onCreate中的片段创建?

时间:2013-08-01 09:08:06

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

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

  

完全有可能在调用onCreate时仍会与先前创建的片段相关联。只要在调用onCreate方法时添加一个新片段就会泄漏片段。为了防止这种情况,示例代码使用了片段管理器标记和位置功能。<​​/ p>

代码是:

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(即它总是死的)。

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

是否存在异常,或者有人可以解释为什么我的想法不正确(我实际上认为它不正确但不知道为什么?)

1 个答案:

答案 0 :(得分:1)

片段会被Activity破坏,但FragmentManager会记住它们,除非你完全完成Activity。如果Activity由于配置更改而被终止,然后重新创建,FragmentManager需要恢复任何以前提交的片段。这就是为什么你要检查Fragment中是否还没有FragmentManager。如果它在那里然后中止交易,否则将最终得到两个片段(您刚刚创建的新片段和FragmentManager记住的旧片段,它将恢复)。