OnCreateView() в Fragment не вызывается сразу, даже после FragmentManager.executePendingTransactions()

Я читал, что если нам нужно немедленно создать фрагмент, мы должны вызвать метод executePendingTransactions() на 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 onCreateView()
}

Я хотел бы знать, почему метод foo() называется BEFORE MyFragment onCreateView(). Как вы видите, я называю executePendingTransactions() в потоке пользовательского интерфейса, как и должно быть. Я вообще не возился с нитями.

Ответы

Ответ 1

Я столкнулся с той же проблемой, и обнаружил, что если бы я запустил один и тот же код фрагмента кода внутри метода onStart, выполнение работало так, как ожидалось. Я не знаю достаточно о жизненном цикле просмотра 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
}