- fragment主要有两种添加方法(最新官方文档统一推荐使用FragmentContainerView)。第一种在xml文件中通过name:指定创建的fragment实例;第二种则是代码动态添加,如下
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.setReorderingAllowed(true)
.add(R.id.fragment_container_view, ExampleFragment.class, null)
.commit();
}
其中,setReorderingAllowed(true)官方推荐使用,其使用场景(未验证):
(1)自定义布局:你可能希望在容器中按照特定的顺序排列组件,而不是依赖于它们的添加顺序。通过启用重新排序,你可以手动控制组件的排列方式,以实现自定义布局效果。
(2)图层管理:在某些情况下,你可能需要在容器中创建多个重叠的组件,并控制它们的显示顺序。通过启用重新排序并使用setComponentZOrder方法,你可以调整组件的堆叠顺序,从而控制它们的显示优先级。
其中,上面代码示例只有savedInstanceState为null才会创建fragment,确保fragment只会在activity第一次创建时才会被创建,当configuration发生变化activity再次创建,savedInstanceState不为null时不会重建。
当你想使用saveBackStack()/restoreBackStack() 方法支持多个返回堆栈,那么setReorderingAllowed(true)和addToBackStack()是必须的
使用FragmentTransaction的add()+hide(){性能好,不能hide太多fragment,不然会oom}之前的fragment效果等同replace(),但是replace会执行fragment生命周期方法。
fragment过渡和动画不能同一时间执行。