最佳答案
一些狀態(tài)丟失的例子:
1.?假設(shè)您有一個(gè)按鈕和一個(gè) TextView 。在代碼中,你已經(jīng)定義了初始值為 0 的整數(shù) i,它通過單擊按鈕遞增 1,并且它的值顯示在 TextView 中。假設(shè)你已經(jīng)按下按鈕 5 次,那么 textview 將被設(shè)置為 0。也就是說?Integer 在屏幕變化時(shí)丟失了它的值。
解決方案:覆蓋 onSaveInstanceState 并輸入整數(shù)值。然后在 onResume 或 onCreate 方法中保留該整數(shù)的值。
2.?假設(shè)您有一個(gè)待辦事項(xiàng) ListView 。用戶動(dòng)態(tài)添加到該 ListView 中的dos。假設(shè)用戶添加了 3 個(gè)項(xiàng)目,然后在屏幕旋轉(zhuǎn)時(shí)(或者如果應(yīng)用程序重新啟動(dòng)), ListView 將變?yōu)榭铡?/span>
解決方案:?再次在 onSaveInstanceState 中,放入 ArrayList。 (列表可以實(shí)現(xiàn)為“Serializabe”或“Parcelable”,并且可以作為一個(gè)整體存儲(chǔ)。您不需要存儲(chǔ) ListView 的每個(gè)項(xiàng)目)。然后在 onResume 或 onCreate 方法中,獲取該 ListView 。
3.屏幕旋轉(zhuǎn)時(shí),屏幕中的所有編輯文本都將變?yōu)榭铡?/span>
我對(duì)狀態(tài)丟失的簡(jiǎn)單理解是,只要配置發(fā)生變化(屏幕旋轉(zhuǎn)或應(yīng)用重啟), Activity 的整個(gè)生命周期都會(huì)被調(diào)用。因此,任何未保存的內(nèi)容都將丟失。
好吧,這讓我想起任天堂的退出屏幕消息,“任何未保存的內(nèi)容都將丟失”。
android onSaveInstanceState
當(dāng)Android應(yīng)用程序的活動(dòng)被系統(tǒng)銷毀時(shí),系統(tǒng)會(huì)調(diào)用onSaveInstanceState()
方法來保存活動(dòng)的當(dāng)前狀態(tài)。該方法獲取一個(gè)Bundle
對(duì)象作為參數(shù),可以用來存儲(chǔ)和傳遞數(shù)據(jù)。當(dāng)活動(dòng)被重新創(chuàng)建時(shí),可以通過onRestoreInstanceState()
方法來恢復(fù)之前保存的狀態(tài)。文章來源:http://www.zghlxwxcb.cn/news/detail-687605.html
以下是一個(gè)示例代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-687605.html
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// 在此處保存需要的狀態(tài)數(shù)據(jù)到outState中
outState.putString("key", "value");
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// 在此處恢復(fù)之前保存的狀態(tài)數(shù)據(jù)
String value = savedInstanceState.getString("key");
}
到了這里,關(guān)于android - fragment 數(shù)據(jù)丟失?狀態(tài)丟失?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!