android - 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?
解决方案
如果文档是这样说明的,我认为它不能返回 null findFragmentByTag("tag")
。
此外,该方法来自FragmentManager
类,因此它只关心片段管理器中是否包含该函数该commit()
函数来自FragmentTransaction
类一个片段可以在片段管理器的后堆栈中,即使它没有提交,这就是函数findFragmentByTag("tag")
将返回的原因片段,并且仅当带有该标签的片段从未添加到片段管理器时才会返回 null
getSupportFragmentManager()
.beginTransaction()
.setReorderingAllowed(true)
.replace(R.id.fragment_holder, fragmentB, "tag")
.addToBackStack(null)
上面的代码将片段添加到主机活动的片段管理器的后堆栈中,您可以这样做并在片段管理器中找到该片段,不需要提交。
推荐阅读
- c# - c#在api控制器中修改路由
- java - java.lang.NoClassDefFoundError: org/apache/qpid/proton/engine/Collector in AmqpProviderFactory.createProvider
- java - 如何为不同的输入类型创建带有 switch 语句的通用方法
- laravel - 尝试访问我的控制器时被禁止
- python-3.x - 在python列表中的索引之间移动
- java - 带有身份验证的 Rtsp 视频流
- java - 尝试在 sqlite android 中选择时发生错误
- php - 如何设置持久记录的限制?
- javascript - 即使单击 JavaScript 警报框取消按钮,查询也会执行并发送电子邮件
- fody - Fody.PropertyChanged - 无法注入 EventInvoker 方法