Android的FragmentTransaction提交时?

我正在构build平板电脑应用程序。 在这个应用程序有一个活动与两个片段。 第一个片段是一个“已知”列表片段,它从数据库查询中显示一个简单的项目布局列表,第二个片段显示有关所选logging(来自列表片段)的详细信息。 第二个片段的思想是它的types取决于列表中显示的logging。 例如,如果logging是客户,则显示所选客户的详细信息,如果他们是库存项目,则显示所选项目的细节等。为了与细节片段进行通信,我创build了每个细节片段类实现的接口。 列表片段在布局xml的活动中是“固定的”。 但是,在创build活动期间创build细节片段,如下所示:

super.onCreate(savedInstanceState); setContentView(R.layout.act_hlpfiles_host); ..... FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.add(R.id.laydetailsfragment, FragmentsPool.getHelperFileFragment(501), "recordDetails"); fragmentTransaction.commit(); myDetailsFragment = getFragmentManager().findFragmentByTag("recordDetails"); ... myListFragment = (frg_hlpfiles_lstrecords) getFragmentManager().findFragmentById(R.id.frg_lstrecords); .... } 

这个代码的问题是myDetailsFragment总是空的。 这是因为fragmentTransaction.commit()不会立即运行,而是在下一次线程准备就绪时发生在主线程上(如android文档所述)。

如果我在onStart()中创build详细片段并在onCreate中实例化列表片段,那么一切正常。

所以问题是:我怎样才能确保fragmentTransaction.commit()已经提交的事务,所以我可以做一些工作与添加片段? 还有什么办法可以等到提交发生,然后继续其余的代码?

感谢您的时间和精力,

克里斯托

尝试在提交事务之后,但在标记查找之前运行fragmentManager.executePendingTransactions() ,看看是否适用于您。

在Android API 24中, FragmentTransaction具有同步.commitNow()方法。 现在在参考中: https : //developer.android.com/reference/android/app/FragmentTransaction.html#commitNow()

相反, .commit()是asynchronous工作的。 它只是安排交易的提交。

“…… 所以我可以用添加的片段做一些工作,还有什么方法可以等到提交发生, 然后继续执行其余的代码

这完全取决于你想做什么工作。 从你的问题,我看到你的工作代码大部分应该在你的片段代码,例如,当一个库存项目被选中。

在selectselect列表项目(为了改变细节片段)的callback中,无论如何你都可以很容易地掌握细节片段。

此外,你已经从FragmentsPool.getHelperFileFragment(501),返回的FragmentsPool.getHelperFileFragment(501),所以我不明白为什么你需要通过它的标签得到片段。

我有兴趣知道你需要做什么工作onCreate与您添加的细节片段。