我读到如果我们需要立即创建 fragment ,我们必须在 FragmentManager
上调用 executePendingTransactions()
方法。嗯,这就是我想要做的。像这样:
@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()
}
我想知道为什么在 MyFragment
的 onCreateView()
之前调用 foo()
方法。如您所见,我在 UI 线程中调用了 executePendingTransactions()
。我根本不会在这里搞乱线程。
最佳答案
我遇到了同样的问题,我发现如果我从 onStart 方法中运行相同的 fragmentTransaction 代码,执行会按预期工作。不过,我对 Android View 生命周期的了解还不够,无法知道为什么会出现这种情况。
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
}
关于java - 即使在 FragmentManager.executePendingTransactions() 之后,也不会立即调用 Fragment 中的 onCreateView(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17229500/