即使在 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()
我想知道为什么在MyFragment
的onCreateView()
之前调用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()的主要内容,如果未能解决你的问题,请参考以下文章