Android中用onSaveInstanceState保存Fragment狀態(tài)的方法
在Fragment里面,利用onSaveInstanceState保存數(shù)據(jù),并可在onActivityCreated里面恢復(fù)數(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里面恢復(fù)數(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); } }
實例
首先看一個步驟,如果是人為關(guān)閉Activity或者Fragment, 比如點擊了后退鍵,主動關(guān)閉當(dāng)前頁面,就會走 onPause() --> onStop() --> onDestroy() 而onSaveInstanceState() 并不會被調(diào)用. onSaveInstanceState() 只有在系統(tǒng)即將要自動清理銷毀Activity或Fragment前才會調(diào)用, 比如
1, 由于重力感應(yīng) 手機從豎屏變?yōu)闄M屏,
2, 手機點擊Home鍵和長按Home鍵
3, 點擊電源鍵鎖屏?xí)r
4, 從當(dāng)前Activity跳到另一個Activity
5, 應(yīng)用內(nèi)存不足即將自動銷毀時等情況
綜合上面的情況,可以看出, onSaveInstanceState() 這個方法適合臨時保存一些非永久性的數(shù)據(jù).如果要持久化保存數(shù)據(jù),就要將操作放在onStop(), onDestroy()這些方法中去.onSaveInstanceState() 適合的是當(dāng)前Activity或者Fragment一旦被系統(tǒng)自己銷毀,應(yīng)用還能在這之前保存一些必要的數(shù)據(jù), 并且用戶的操作很快又回到當(dāng)前這個頁面,這個時候數(shù)據(jù)并沒有丟失,還能最大程度的恢復(fù)之前狀態(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); } //恢復(fù)數(shù)據(jù) @Override public void onViewStateRestored(Bundle savedInstanceState){ <span style="white-space:pre"> </span>super.onViewStateRestored(savedInstanceState); <span style="white-space:pre"> </span>//恢復(fù)之前輸入框的內(nèi)容 <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()方法恢復(fù)數(shù)據(jù),也可以在onCreate()中恢復(fù),因為Activity一旦被銷毀就會重走一次onCreate()開始的正常生命周期 @Override public void onRestoreInstanceState(Bundle savedInstanceState){ super.onRestoreInstanceState(savedInstanceState); //恢復(fù)之前輸入框的內(nèi)容 if(savedInstanceState != null){ etCon.setText(savedInstanceState.getString("inputCon", "")); } } @Override public void onDestroy(){ super.onDestroy(); //Activity被銷毀前可進行最后一次數(shù)據(jù)的保存,過了這村就沒這店了. }
這里有個重要的點,上面的上面所提及的onSaveInstanceState()方法只有在Activity或Fragment確定要被系統(tǒng)自動清除時,才會被調(diào)用,如果不是長期后臺應(yīng)用,頁面沒有被系統(tǒng)kill掉,對應(yīng)的Activity或Fragment也就不會調(diào)用onSaveInstanceState()這些方法.
- android中Activity詳解(生命周期、以各種方式啟動Activity、狀態(tài)保存,完全退出等)
- Android保存Activity狀態(tài)的方法
- Android學(xué)習(xí)小結(jié)之Activity保存和恢復(fù)狀態(tài)
- Android 保存Fragment 切換狀態(tài)實例代碼
- 實例探究Android開發(fā)中Fragment狀態(tài)的保存與恢復(fù)方法
- android初學(xué)者必須掌握的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)保存的方法分析
相關(guān)文章
Android ListView彈性效果的實現(xiàn)方法
這篇文章主要為大家詳細介紹了Android ListView彈性效果的實現(xiàn)方法,感興趣的小伙伴們可以參考一下2016-05-05Android開發(fā)之Activity管理工具類完整示例
這篇文章主要介紹了Android開發(fā)之Activity管理工具類,集合完整實例形式分析了Android操作Activity創(chuàng)建、添加、獲取、移除等相關(guān)操作技巧,需要的朋友可以參考下2018-01-01Android 按后退鍵退出Android程序的實現(xiàn)方法
本篇文章介紹了,在Android中按后退鍵退出Android程序的實現(xiàn)方法。需要的朋友參考下2013-04-04Android開發(fā)實現(xiàn)在TextView前面加標(biāo)簽示例
這篇文章主要為大家介紹了Android開發(fā)實現(xiàn)TextView前面加標(biāo)簽示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-04-04