【发布时间】:2019-09-10 11:59:29
【问题描述】:
我试图了解发生配置更改时片段的行为。
我创建了一个项目,其中一个活动将在onCreate() 中托管一个片段:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(savedInstanceState==null) {
mFragment1 = new Fragment1();
mManager = getFragmentManager();
mManager.beginTransaction().add(R.id.container_1, mFragment1, null)
.add(R.id.container_1, mFragment1, null)
.commit();
}
}
如果事务仅在 savedInstanceState 为 null 时发生,并且活动和片段被销毁并重新创建,为什么我的活动在设备旋转时再次托管片段? 我的观点是:如果在旋转后保存的实例状态不为空,为什么片段管理器会再次添加片段?
谢谢。
【问题讨论】:
-
Fragments 有自己的生命周期,但它总是嵌入到一个 Activity 中,因此 Fragments 的生命周期直接受到宿主 Activity 生命周期的影响
-
如果你没有保存任何
onSaveInstance回调,那么savedInstance将为空,因此片段事务再次发生。 -
例如:方向变化是触发这个生命周期的配置变化。基于此:这取决于您是否在清单中使用
android:configChanges="orientation"。如果你这样做了,一切都将保持不变,视图只是重新布局自己。如果没有,Activity 和 Fragment 将使用它们保存的实例重新创建,您可以将其覆盖为onSaveInstanceState(Bundle outState)。 -
我的观点是:如果在rotation后saveinstancestate不为null,为什么fragment manager还要重新添加fragments?