Android FragmentTransaction提交什么时候?

ChD*_*ers 46 android android-fragments

我正在构建一个平板电脑应用 在这个应用程序中,有一个活动有两个片段.第一个片段是"已知"列表片段,它显示来自数据库查询的简单的一个项目布局列表,第二个片段显示有关所选记录的详细信息(来自列表片段).第二个片段的思考是它的类型取决于列表中显示的记录.例如,如果记录是客户,则显示所选客户的详细信息,如果它们是库存项目,则显示所选项目的详细信息等.为了与详细信息片段进行通信,我创建了一个每个详细信息片段类实现的接口.列表片段在布局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()已经提交了事务,所以我可以使用添加的片段做一些工作?还有什么方法可以等到提交发生,然后继续其余的代码?

Mar*_*k D 104

fragmentManager.executePendingTransactions()在提交您的交易之后尝试运行,但在找到标签之前,看看它是否适合您.

  • 嘿马克!这是什么!这是工作.现在我还有另外一个问题,你能不能告诉我为什么我会阅读3-4次FragmentTransaction的文档来找到解决方案,但我从未查看过FragmentManager的文档?:-) (2认同)
  • 我很高兴这很有用.文档可以更具凝聚力和直观性...... (2认同)

Ost*_*siv 7

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

相反,.commit()异步工作.它只是安排事务的提交.