这里我写了一个简单的活动和片段。我更改了方向,因为它的配置更改调用,所以它再次调用 Activity.onCreate(),但为什么 Fragment.onCreateView()再次。因为我没有在配置更改调用上调用fragment子。
这是我的代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.home_container);
log("life_cycle_activity", "onCreate");
if(savedInstanceState != null) {
log("life_cycle_activity", "ohh..configuration changed");
return;
} else {
launchChildFragment();
}
}
注意:android:configChanges不适用于Settings-> Display-> FontStyle更改
任何建议如何防止Fragment调用配置更改。
答案 0 :(得分:1)
您可以致电:
public void setRetainInstance(boolean retain)
在片段onCreate中具有真值 - 这将创建所谓的保留片段
或使用以下方法阻止活动配置更改:
机器人:configChanges = “取向|键盘| keyboardHidden |屏幕布置|区域| fontScale | MNC | MCC”
在清单中。
答案 1 :(得分:1)
正在重新创建片段,因为savedInstanceState
参数包含有关"之前"的信息。活动中存在的碎片。检查FragmentActivity中onRetainNonConfigurationInstance()
方法的实现(以及onCreate()
中的相应逻辑),然后您将看到此信息的存储和重新加载位置。
至于#34;字体大小"配置更改,似乎不可能(或者至少我没有找到办法)使用android:configChanges
来处理它。请参阅this question。
尽管如此:
任何建议如何防止调用Fragment.onViewCreate 配置改变。
为什么需要这样做?