我正在开发一个平板应用。该应用有一个包含两个片段的活动。第一个片段是一个“已知列表”片段,从数据库查询结果中显示一个简单的单项布局列表,第二个片段显示所选记录的详细信息(来自列表片段)。第二个片段的类型取决于在列表中显示的记录。例如,如果记录是客户,则显示所选客户的详细信息;如果记录是库存物品,则显示所选物品的详细信息等。 为了与详细信息片段通信,我创建了一个接口,每个详细信息片段类都实现该接口。 列表片段在布局 XML 中被“固定”在活动中。但是详细信息片段是在活动创建期间像这样创建的:
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() 中创建细节片段,并在 onCreate() 中实例化列表片段,则一切正常。
因此问题是:我如何确保 fragmentTransaction.commit() 已经提交了事务,以便可以对添加的片段进行一些处理?此外,是否有办法等待提交完成,然后继续执行其余的代码?