1

亲爱的开发者,

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()");
}

我的 Fragment 的 onCreate() 有一个 Sysout.println() 用于测试目的,以查看它何时执行。让我感到奇怪的是:为什么 Activity 的 onCreate 会在调用 Fragment 的 onCreate() 之前先完成执行?发生的情况是,上面代码中显示的 Sysout.println 实际上在另一个 Sysout.println 之前执行,它位于我的 Fragment 的 onCreate() 中。我希望在通过片段事务将片段添加到活动之前执行片段的 onCreate()。这是它应该工作的方式吗?还是我在文档中读到的问题是 commit() 方法不会立即执行,而是仅将片段事务放在队列中?

我想要实现的是:

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

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

非常感谢!

4

1 回答 1

0

来自 AndroidFragmentTransaction.Commit() 文档

安排此事务的提交。提交不会立即发生;它将被安排在主线程上的工作,以便在该线程下一次准备好时完成。

如果您希望立即处理您的事务,请FragmentManager.ExecutePendingTransactions()从您的 UI 线程调用。

于 2013-11-06T20:17:39.030 回答