首页 > 解决方案 > android-在提交事务后立即调用 findFragmentByTag

问题描述

用另一个片段替换片段的常见做法是:

getActivity().getSupportFragmentManager()
.beginTransaction()
.setReorderingAllowed(true)
.replace(R.id.fragment_holder, ItemFragment.newInstance(bundle),"tag")
.addToBackStack(null)
.commit();

方法的文档commit()说:

安排此事务的提交。提交不会立即发生;它将被安排在主线程上的工作,以便在该线程下一次准备好时完成。

现在想象一下我getActivity.getSupportFragmentManager.findFragmentByTag("tag");在上面提到的提交方法之后立即调用。由于提交不会立即发生,它是否有可能返回 null?

标签: androidandroid-fragmentsfragmenttransaction

解决方案


如果文档是这样说明的,我认为它不能返回 null findFragmentByTag("tag")

此外,该方法来自FragmentManager类,因此它只关心片段管理器中是否包含该函数该commit()函数来自FragmentTransaction类一个片段可以在片段管理器的后堆栈中,即使它没有提交,这就是函数findFragmentByTag("tag")将返回的原因片段,并且仅当带有该标签的片段从未添加到片段管理器时才会返回 null

getSupportFragmentManager()
   .beginTransaction()
   .setReorderingAllowed(true)
   .replace(R.id.fragment_holder, fragmentB, "tag")
   .addToBackStack(null)

上面的代码将片段添加到主机活动的片段管理器的后堆栈中,您可以这样做并在片段管理器中找到该片段,不需要提交。


推荐阅读