19

我读到如果我们需要立即创建片段,我们必须调用executePendingTransactions()方法 on FragmentManager。嗯,这就是我想要做的。像这样:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_game);

    FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

    fragmentTransaction.add(R.layout.fragmentContainer, new MyFragment);
    fragmentTransaction.commit();
    fragmentManager.executePendingTransactions();

    foo(); // It is called before MyFragment's onCreateView()
}

我想知道为什么foo()方法被称为 BEFOREMyFragmentonCreateView()。如您所见,我正在调用executePendingTransactions()UI 线程。我根本不会在这里搞乱线程。

4

1 回答 1

18

我遇到了同样的问题,我发现如果我从 onStart 方法中运行相同的 fragmentTransaction 代码,执行会按预期工作。我对 Android 视图生命周期的了解不够多,无法知道为什么会出现这种情况。

public void onStart() {
    FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

    fragmentTransaction.add(R.layout.fragmentContainer, new MyFragment);
    fragmentTransaction.commit();
    fragmentManager.executePendingTransactions();

    foo(); // Should now work correctly
}
于 2013-08-29T22:25:01.387 回答