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

Posted

技术标签:

【中文标题】即使在 FragmentManager.executePendingTransactions() 之后,也不会立即调用 Fragment 中的 onCreateView()【英文标题】:onCreateView() in Fragment is not called immediately, even after FragmentManager.executePendingTransactions() 【发布时间】:2013-06-18 05:54:18 【问题描述】:

我读到如果我们需要立即创建片段,我们必须在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()

我想知道为什么在MyFragmentonCreateView() 之前调用foo() 方法。如您所见,我在 UI 线程中调用 executePendingTransactions() 是应该的。我根本不会在这里搞乱线程。

【问题讨论】:

你能附加一个布尔值来执行像boolean val = fragmentManager.executePendingTransactions();这样的挂起的txns,看看在调试时调用foo后它会产生什么。 您好,请问有这个问题的消息吗?我面临同样的问题,无法找到解决方案。如果你已经解决了,可以分享一下解决方案吗? @Haspemulator 不幸的是,我最终决定使用完全不同的方法。 我仍然对为什么它在 onStart 而不是 onCreate 中有效。有人吗? 【参考方案1】:

我遇到了同样的问题,我发现如果我从 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

【讨论】:

谢谢!我只想添加一个有用的功能 - 使用 onPostCreate() 而不是 onStart() 以避免每次调用 onStart() 时创建片段。干杯! 哇,我不敢相信这行得通。 Android 真是令人困惑的编辑:whaaaa no this onStart 在没有 oncreate 的情况下被调用,比如从相机意图返回......

以上是关于即使在 FragmentManager.executePendingTransactions() 之后,也不会立即调用 Fragment 中的 onCreateView()的主要内容,如果未能解决你的问题,请参考以下文章

即使屏幕关闭,如何在后台运行代码?

即使在采取响应操作后,UIAlertView 也不会消失

为啥即使在 System.exit(0) 之后也需要返回;

Tensorflow:即使在关闭会话时内存泄漏?

即使我阻止横向旋转,屏幕也在旋转

Xcode 测试:清理代码,即使停止