在 Fragment 中不会立即调用 onCreateView(), 即使在 FragmentManager.executePendingTransactions() 之后也是如此。

2022-09-02 13:35:24

我读到,如果我们需要立即创建片段,我们必须在 上调用方法。好吧,这就是我想要做的。喜欢这个: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's onCreateView()
}

我想知道为什么方法被称为BEFORE的。如您所见,我正在调用UI线程,因为它应该是。我一点也不在这里弄乱线程。foo()MyFragmentonCreateView()executePendingTransactions()


答案 1

我遇到了同样的问题,我发现如果我从onStart方法中运行相同的片段Transaction代码,则执行按预期工作。我对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
}

答案 2

推荐