欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間: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ù)據(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()這些方法.

相關(guān)文章

最新評論