2012-10-15 63 views
1

可能重複:
Android fragments setRetainInstance(true) not works (Android support library)片段setRetainInstance不工作(支持Android LIB)

我寫了一個簡單的測試項目,但我不能明白,爲什麼我總是收到savedInstanceState = NULL的生命週期方法onCreate,onCreateView和onActivityCreated。我改變屏幕方向,看到日誌,但沒有保存狀態。 請告訴我,我的錯誤在哪裏。 謝謝。 片段類的代碼是:

public class TestFragment extends Fragment { 

private String state = "1"; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    if (savedInstanceState != null) { 
     //never works 
     state = savedInstanceState.getString("state"); 
    } 
    //always prints 1 
    Toast.makeText(getActivity(), state, Toast.LENGTH_SHORT).show(); 
    return inflater.inflate(R.layout.fragment_layout, container, false); 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putString("state", "2"); 
    Log.e("", "saved 2"); 
} 

}

EDIT

當我嘗試使用setRetainInstance我不結果再次(((I更改使用BTN1爲2的狀態下,但改變方向後,我看到1時按btn2。請幫助(

公共課TestFragment擴展片段{

@Override 
public void onCreate(Bundle savedInstanceState) { 
    setRetainInstance(true); 
    super.onCreate(savedInstanceState); 
} 

private String state = "1"; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.fragment_layout, container, false); 

    //button for changing state 
    ((Button)view.findViewById(R.id.button1)).setOnClickListener(new View.OnClickListener() { 
     public void onClick(View arg0) { 
      state = "2"; 
     } 
    }); 

    //button for showing state 
    ((Button)view.findViewById(R.id.button2)).setOnClickListener(new View.OnClickListener() { 
     public void onClick(View arg0) { 
      Toast.makeText(getActivity(), state, Toast.LENGTH_SHORT).show(); 
     } 
    }); 

    return view; 
} 

}

回答

0

我已經看到了同樣的問題。但是,由於使用了setRetainInstance(true)方法,您可以通過其他方式保存instate狀態,所有類的數據都會自動保存。

@Override 
public void onCreate(Bundle savedInstanceState) { 
    setRetainInstance(true); 
    super.onCreate(savedInstanceState); 
} 

編輯

嘗試,當你宣佈你的活動,還添加這些PARAMS:

<activity 
     android:name="MyActivity" 
     android:configChanges="orientation|keyboardHidden|screenSize" /> 
+0

謝謝您的回答!但我不能再保存狀態(我編輯了一篇文章,請看看它,如果你有一些時間 – j2esu

+0

非常感謝...通過添加此行android:configChanges =「orientation | keyboardHidden | screenSize」它適用於我像魅力:) –

+0

那麼,清單的變化使得活動本身必須處理配置更改,即禁用系統重新構建/調整屏幕。所以如果你有縱向或橫向不同的佈局不會切換。另外,'setRetainInstance'在這種情況下不是必需的,因爲沒有東西會被重新創建。 – Ixx