亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android中用onSaveInstanceState保存Fragment狀態(tài)的方法

 更新時(shí)間:2016年04月27日 10:13:14   作者:SoloHo  
這篇文章主要介紹了Android中用onSaveInstanceState保存Fragment狀態(tài)的方法,onSaveInstanceState可以將數(shù)據(jù)保存在Fragment或Activity中,需要的朋友可以參考下

在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í)例的數(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);
  }
}

實(shí)例
首先看一個(gè)步驟,如果是人為關(guān)閉Activity或者Fragment, 比如點(diǎn)擊了后退鍵,主動(dòng)關(guān)閉當(dāng)前頁(yè)面,就會(huì)走 onPause() --> onStop()  --> onDestroy()  而onSaveInstanceState() 并不會(huì)被調(diào)用. onSaveInstanceState() 只有在系統(tǒng)即將要自動(dòng)清理銷毀Activity或Fragment前才會(huì)調(diào)用, 比如

1, 由于重力感應(yīng) 手機(jī)從豎屏變?yōu)闄M屏,

2, 手機(jī)點(diǎn)擊Home鍵和長(zhǎng)按Home鍵

3, 點(diǎn)擊電源鍵鎖屏?xí)r

4, 從當(dāng)前Activity跳到另一個(gè)Activity

5, 應(yīng)用內(nèi)存不足即將自動(dòng)銷毀時(shí)等情況


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

在Fragment中:

//系統(tǒng)自動(dò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)自動(dò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ù),因?yàn)锳ctivity一旦被銷毀就會(huì)重走一次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被銷毀前可進(jìn)行最后一次數(shù)據(jù)的保存,過(guò)了這村就沒這店了.
}

這里有個(gè)重要的點(diǎn),上面的上面所提及的onSaveInstanceState()方法只有在Activity或Fragment確定要被系統(tǒng)自動(dòng)清除時(shí),才會(huì)被調(diào)用,如果不是長(zhǎng)期后臺(tái)應(yīng)用,頁(yè)面沒有被系統(tǒng)kill掉,對(duì)應(yīng)的Activity或Fragment也就不會(huì)調(diào)用onSaveInstanceState()這些方法.

相關(guān)文章

最新評(píng)論