国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android中用onSaveInstanceState保存Fragment狀態的方法

2020-02-21 17:23:58
字體:
來源:轉載
供稿:網友

Android系統中,當活動發生異常破壞時,會觸發活動的片段,保存開發者需要保存的活動/片段狀態,并自動保存各自的視圖狀態,感興趣的話就隨武林技術頻道小編一起來了解下吧!

在Fragment里面,利用onSaveInstanceState保存數據,并可在onActivityCreated里面恢復數據。

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實例的數據,并可在onCreate里面恢復數據:

private Fragment myFragment;public void onCreate(Bundle savedInstanceState) {  ...  if (savedInstanceState == null) {    // Instantiate fragment  } else {    // Restore the fragment's instance    myFragment = getSupportFragmentManager().getFragment(          savedInstanceState, "fragment");  }  ...}@Overrideprotected 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() 只有在系統即將要自動清理銷毀Activity或Fragment前才會調用, 比如

1, 由于重力感應 手機從豎屏變為橫屏,

2, 手機點擊Home鍵和長按Home鍵

3, 點擊電源鍵鎖屏時

4, 從當前Activity跳到另一個Activity

5, 應用內存不足即將自動銷毀時等情況


?綜合上面的情況,可以看出, onSaveInstanceState()? 這個方法適合臨時保存一些非永久性的數據.如果要持久化保存數據,就要將操作放在onStop(), onDestroy()這些方法中去.onSaveInstanceState()? 適合的是當前Activity或者Fragment一旦被系統自己銷毀,應用還能在這之前保存一些必要的數據, 并且用戶的操作很快又回到當前這個頁面,這個時候數據并沒有丟失,還能最大程度的恢復之前狀態.這就是這個方法最大的意義.下面上例子做個簡單示例:

在Fragment中:

//系統自動銷毀Fragment前保存必要的數據@Overridepublic 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);} //恢復數據@Overridepublic 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中

//系統自動銷毀Activity前保存必要的數據@Overridepublic void onSaveInstanceState(Bundle outState){<span style="white-space:pre"> </span>super.onSaveInstanceState(outState); String content = etCon.getText().toString(); outState.putString("inputCon", content);} //Activity中可在onRestoreInstanceState()方法恢復數據,也可以在onCreate()中恢復,因為Activity一旦被銷毀就會重走一次onCreate()開始的正常生命周期@Overridepublic void onRestoreInstanceState(Bundle savedInstanceState){ super.onRestoreInstanceState(savedInstanceState); //恢復之前輸入框的內容 if(savedInstanceState != null){ etCon.setText(savedInstanceState.getString("inputCon", "")); }} @Overridepublic void onDestroy(){ super.onDestroy(); //Activity被銷毀前可進行最后一次數據的保存,過了這村就沒這店了.}

這里有個重要的點,上面的上面所提及的onSaveInstanceState()方法只有在Activity或Fragment確定要被系統自動清除時,才會被調用,如果不是長期后臺應用,頁面沒有被系統kill掉,對應的Activity或Fragment也就不會調用onSaveInstanceState()這些方法.

?

以上就是武林技術頻道小編介紹的Android中用onSaveInstanceState保存Fragment狀態的方法,我們除了做開發之外,還可以多多推薦js.Vevb.com給大家收藏哦。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 综艺| 托克托县| 吉木萨尔县| 张掖市| 新野县| 胶州市| 循化| 开鲁县| 南雄市| 布尔津县| 花莲县| 瓦房店市| 龙山县| 鹰潭市| 上饶县| 平潭县| 罗平县| 依兰县| 佛山市| 东光县| 社会| 婺源县| 宣汉县| 伊金霍洛旗| 大方县| 都兰县| 行唐县| 兰溪市| 集安市| 青冈县| 大兴区| 大理市| 盈江县| 南京市| 江山市| 光山县| 宜川县| 垫江县| 垫江县| 平阳县| 江源县|