Android中用onSaveInstanceState保存Fragment狀態(tài)的方法
在Fragment里面,利用onSaveInstanceState保存數(shù)據(jù),并可在onActivityCreated里面恢復數(shù)據(jù)。
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
...
if (savedInstanceState != null) {
// Restore the fragment's state here
}
}
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// Save the fragment's state here
}
在Activity里面,利用onSaveInstanceState保存Fragment實例的數(shù)據(jù),并可在onCreate里面恢復數(shù)據(jù):
private Fragment myFragment;
public void onCreate(Bundle savedInstanceState) {
...
if (savedInstanceState == null) {
// Instantiate fragment
} else {
// Restore the fragment's instance
myFragment = getSupportFragmentManager().getFragment(
savedInstanceState, "fragment");
}
...
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//Save the fragment's instance
// fragment instance may be null
if (myFragment != null) {
getSupportFragmentManager().putFragment(outState, "fragment", myFragment);
}
}
實例
首先看一個步驟,如果是人為關閉Activity或者Fragment, 比如點擊了后退鍵,主動關閉當前頁面,就會走 onPause() --> onStop() --> onDestroy() 而onSaveInstanceState() 并不會被調用. onSaveInstanceState() 只有在系統(tǒng)即將要自動清理銷毀Activity或Fragment前才會調用, 比如
1, 由于重力感應 手機從豎屏變?yōu)闄M屏,
2, 手機點擊Home鍵和長按Home鍵
3, 點擊電源鍵鎖屏時
4, 從當前Activity跳到另一個Activity
5, 應用內存不足即將自動銷毀時等情況
綜合上面的情況,可以看出, onSaveInstanceState() 這個方法適合臨時保存一些非永久性的數(shù)據(jù).如果要持久化保存數(shù)據(jù),就要將操作放在onStop(), onDestroy()這些方法中去.onSaveInstanceState() 適合的是當前Activity或者Fragment一旦被系統(tǒng)自己銷毀,應用還能在這之前保存一些必要的數(shù)據(jù), 并且用戶的操作很快又回到當前這個頁面,這個時候數(shù)據(jù)并沒有丟失,還能最大程度的恢復之前狀態(tài).這就是這個方法最大的意義.下面上例子做個簡單示例:
在Fragment中:
//系統(tǒng)自動銷毀Fragment前保存必要的數(shù)據(jù)
@Override
public void onSaveInstanceState(Bundle outState){
<span style="white-space:pre"> </span>super.onSaveInstanceState(outState);
<span style="white-space:pre"> </span>String content = etCon.getText().toString();
<span style="white-space:pre"> </span>outState.putString("inputCon", content);
}
//恢復數(shù)據(jù)
@Override
public void onViewStateRestored(Bundle savedInstanceState){
<span style="white-space:pre"> </span>super.onViewStateRestored(savedInstanceState);
<span style="white-space:pre"> </span>//恢復之前輸入框的內容
<span style="white-space:pre"> </span>if(savedInstanceState != null){
<span style="white-space:pre"> </span>etCon.setText(savedInstanceState.getString("inputCon", ""));
}
}
在Activity中
//系統(tǒng)自動銷毀Activity前保存必要的數(shù)據(jù)
@Override
public void onSaveInstanceState(Bundle outState){
<span style="white-space:pre"> </span>super.onSaveInstanceState(outState);
String content = etCon.getText().toString();
outState.putString("inputCon", content);
}
//Activity中可在onRestoreInstanceState()方法恢復數(shù)據(jù),也可以在onCreate()中恢復,因為Activity一旦被銷毀就會重走一次onCreate()開始的正常生命周期
@Override
public void onRestoreInstanceState(Bundle savedInstanceState){
super.onRestoreInstanceState(savedInstanceState);
//恢復之前輸入框的內容
if(savedInstanceState != null){
etCon.setText(savedInstanceState.getString("inputCon", ""));
}
}
@Override
public void onDestroy(){
super.onDestroy();
//Activity被銷毀前可進行最后一次數(shù)據(jù)的保存,過了這村就沒這店了.
}
這里有個重要的點,上面的上面所提及的onSaveInstanceState()方法只有在Activity或Fragment確定要被系統(tǒng)自動清除時,才會被調用,如果不是長期后臺應用,頁面沒有被系統(tǒng)kill掉,對應的Activity或Fragment也就不會調用onSaveInstanceState()這些方法.
- android中Activity詳解(生命周期、以各種方式啟動Activity、狀態(tài)保存,完全退出等)
- Android保存Activity狀態(tài)的方法
- Android學習小結之Activity保存和恢復狀態(tài)
- Android 保存Fragment 切換狀態(tài)實例代碼
- 實例探究Android開發(fā)中Fragment狀態(tài)的保存與恢復方法
- android初學者必須掌握的Activity狀態(tài)的四大知識點(必讀)
- Android編程實現(xiàn)隱藏狀態(tài)欄及測試Activity是否活動的方法
- Android中檢查、監(jiān)聽電量和充電狀態(tài)的方法
- Android中監(jiān)聽軟鍵盤顯示狀態(tài)實現(xiàn)代碼
- Android編程實現(xiàn)狀態(tài)保存的方法分析
相關文章
Android使用ftp方式實現(xiàn)文件上傳和下載功能
這篇文章主要介紹了Android使用ftp方式實現(xiàn)文件上傳和下載功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06
Android編程實現(xiàn)手機自帶內部存儲路徑的獲取方法
這篇文章主要介紹了Android編程實現(xiàn)手機自帶內部存儲路徑的獲取方法,涉及Android針對掛載點信息的獲取技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-11-11
Moshi?完美解決Gson在kotlin中默認值空的問題詳解
這篇文章主要為大家介紹了Moshi?完美解決Gson在kotlin中默認值空的問題詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03
Flutter桌面開發(fā)windows插件開發(fā)
這篇文章主要為大家介紹了Flutter桌面開發(fā)windows插件開發(fā)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11
Flutter啟動頁(閃屏頁)的具體實現(xiàn)及原理詳析
這篇文章主要給大家介紹了關于Flutter啟動頁(閃屏頁)的具體實現(xiàn)及原理的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Flutter具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-04-04
Android在listview添加checkbox實現(xiàn)原理與代碼
Android在listview添加checkbox如何實現(xiàn)一直都是新手朋友們的頭疼問題,接下來為您詳細介紹實現(xiàn)方法,感興趣的朋友可以了解下2013-01-01

