在 Android 中,當設備的配置發生變化時(例如屏幕方向、語言改變、鍵盤可見性等),系統可能會銷毀并重新創建當前的 Fragment。為了確保 Fragment 在配置變化時能夠正確地恢復其狀態,你需要遵循以下步驟:
onCreate
方法中,使用 setRetainInstance(true)
來保留 Fragment 實例。這將確保在配置變化時,Fragment 不會被銷毀,而是在新的實例中恢復其狀態。@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
onSaveInstanceState
方法中,保存 Fragment 的關鍵狀態信息。這可以確保在配置變化時,這些信息不會丟失。@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// 保存關鍵狀態信息,例如文本輸入框的值
outState.putString("key", "value");
}
onCreateView
或 onActivityCreated
方法中,從 Bundle savedInstanceState
中恢復之前保存的狀態信息。@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (savedInstanceState != null) {
// 恢復關鍵狀態信息
String value = savedInstanceState.getString("key");
}
// 創建和返回 Fragment 的視圖
}
AndroidManifest.xml
文件中為 Fragment 關聯一個 android:configChanges
屬性,并指定需要處理的配置變化類型。<fragment
android:id="@+id/my_fragment"
android:name="com.example.MyFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:configChanges="orientation|screenSize|keyboardHidden" />
這將告訴系統,當這些配置變化發生時,不要銷毀并重新創建 Fragment,而是調用 onConfigurationChanged
方法來處理這些變化。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// 處理配置變化,例如調整布局方向
}
請注意,使用 android:configChanges
屬性可能會導致 Fragment 無法正確地響應系統配置變化,因此請謹慎使用。在大多數情況下,使用 setRetainInstance(true)
和保存/恢復狀態信息的方法更為可靠。