Fragment.onCreate()与Activity.onCreate()之间的关系

时间:2013-01-19 23:39:46

标签: android android-fragments

亲爱的开发人员,

Fragment的onCreate()方法与Activity之间的关系对我来说还不是很清楚。我正在将片段附加到这样的活动中。

//happens in the Activity:
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState);
    FragmentManager fragMan = this.getSupportFragmentManager();
    Fragment dataModelFragment = fragMan.findFragmentByTag("data_model");
    if (dataModelFragment == null) {
        dataModelFragment = new DataModelFragment();
        fragMan.beginTransaction().add(dataModelFragment,"data_model").commit();
    }
    System.out.println("Executing Activity.onCreate()");
}

My Fragment的onCreate()有一个Sysout.println()用于测试目的,以查看它的确切执行时间。令我惊讶的是:为什么在调用片段的onCreate()之前,Activity的onCreate首先完成执行?会发生的是上面代码中显示的Sysout.println实际上是在我的Fragment的onCreate()中的另一个Sysout.println之前执行的。我希望在我通过片段事务将它添加到Activity之前执行Fragment的onCreate()。这是应该的方式吗?或者我在docs中读到的问题是commit()方法不立即执行但是只将片段事务放在队列中?

我想要达到的目的是:

  • 我正在使用Fragment的单例实例作为数据模型,以便在活动生命周期中保留。
  • 我想将这个片段添加到活动中,然后让这个片段执行初始化(创建数据库连接并将数据加载到其数据成员中)
  • 最后,片段中的数据应与Activity的视图中的AdapterViews一起使用。

所以这三个步骤:用数据初始化片段,将片段附加到活动,从片段的数据创建活动中的适配器。我的问题:这些事件应该在哪些方法中发生,以确保正确的执行顺序?

非常感谢!

1 个答案:

答案 0 :(得分:0)

来自Android FragmentTransaction.Commit() docs

  

计划此交易的提交。提交不会发生   立即;它将被安排为主线程上的工作   下次线程准备就绪时完成。

如果您希望立即处理您的交易,请从您的UI线程中调用FragmentManager.ExecutePendingTransactions()