在 Android 中,當(dāng)設(shè)備的配置發(fā)生變化時(shí)(例如屏幕方向、語(yǔ)言改變、鍵盤(pán)可見(jiàn)性等),系統(tǒng)可能會(huì)銷(xiāo)毀并重新創(chuàng)建當(dāng)前的 Fragment。為了確保 Fragment 在配置變化時(shí)能夠正確地恢復(fù)其狀態(tài),你需要遵循以下步驟:
onCreate
方法中,使用 setRetainInstance(true)
來(lái)保留 Fragment 實(shí)例。這將確保在配置變化時(shí),F(xiàn)ragment 不會(huì)被銷(xiāo)毀,而是在新的實(shí)例中恢復(fù)其狀態(tài)。@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
onSaveInstanceState
方法中,保存 Fragment 的關(guān)鍵狀態(tài)信息。這可以確保在配置變化時(shí),這些信息不會(huì)丟失。@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// 保存關(guān)鍵狀態(tài)信息,例如文本輸入框的值
outState.putString("key", "value");
}
onCreateView
或 onActivityCreated
方法中,從 Bundle savedInstanceState
中恢復(fù)之前保存的狀態(tài)信息。@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (savedInstanceState != null) {
// 恢復(fù)關(guān)鍵狀態(tài)信息
String value = savedInstanceState.getString("key");
}
// 創(chuàng)建和返回 Fragment 的視圖
}
AndroidManifest.xml
文件中為 Fragment 關(guān)聯(lián)一個(gè) android:configChanges
屬性,并指定需要處理的配置變化類(lèi)型。<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" />
這將告訴系統(tǒng),當(dāng)這些配置變化發(fā)生時(shí),不要銷(xiāo)毀并重新創(chuàng)建 Fragment,而是調(diào)用 onConfigurationChanged
方法來(lái)處理這些變化。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// 處理配置變化,例如調(diào)整布局方向
}
請(qǐng)注意,使用 android:configChanges
屬性可能會(huì)導(dǎo)致 Fragment 無(wú)法正確地響應(yīng)系統(tǒng)配置變化,因此請(qǐng)謹(jǐn)慎使用。在大多數(shù)情況下,使用 setRetainInstance(true)
和保存/恢復(fù)狀態(tài)信息的方法更為可靠。