我正在构建一个平板电脑应用 在这个应用程序中,有一个活动有两个片段.第一个片段是"已知"列表片段,它显示来自数据库查询的简单的一个项目布局列表,第二个片段显示有关所选记录的详细信息(来自列表片段).第二个片段的思考是它的类型取决于列表中显示的记录.例如,如果记录是客户,则显示所选客户的详细信息,如果它们是库存项目,则显示所选项目的详细信息等.为了与详细信息片段进行通信,我创建了一个每个详细信息片段类实现的接口.列表片段在布局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);
....
}
Run Code Online (Sandbox Code Playgroud)
此代码的问题是myDetailsFragment始终为null.这是因为fragmentTransaction.commit()不会立即运行,但它会在下一次线程准备就绪时发生在主线程上(如android文档所述).
如果我在onStart()中创建详细信息片段并在onCreate中实例化列表片段,一切正常.
所以问题是:我如何确定fragmentTransaction.commit()已经提交了事务,所以我可以使用添加的片段做一些工作?还有什么方法可以等到提交发生,然后继续其余的代码?