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
}