2012-08-05 61 views
1

在Google Api示例代碼中,他們有一個關於保存狀態的非常簡單的示例。我需要這個來處理屏幕旋轉。解釋GoogleApi savedInstanceState

我的問題是,我不明白方法getSavedText()setSaveText()被調用。我把調試器放在它們上面,但它永遠不會被觸發。整個事情只是通過「魔術」起作用。還有什麼其他的東西可以保存?哪裏才能找到文件,說明 http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/SaveRestoreState.html

備選魔術

public class SaveState extends Activity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_save_state); 
    ((TextView)findViewById(R.id.msg)).setText(R.string.hello_world); 
} 
CharSequence getSavedText() { 
    return ((EditText)findViewById(R.id.saved)).getText(); 
} 
void setSavedText(CharSequence text) { 
    ((EditText)findViewById(R.id.saved)).setText(text); 
} 
} 

鏈接鏈接 http://goo.gl/6TJy5

+0

添加一個鏈接到你引用的例子。 – 2012-08-05 11:32:48

+0

我想你與onSaveInstanceState和onRestoreInstanceState混淆 – 2012-08-05 11:37:16

+0

Tomer:這不是我的代碼,這是Google的代碼,我只是想了解它,它工作正常 – 2012-08-05 15:32:49

回答

1

這個API演示樣品是壞的,因爲它混淆你期望它會覆蓋的onSaveInstanceState( )方法,而不是在讀取文檔時使用onCreate()或onRestoreInstanceState()中的持久狀態。

首先getSavedText()和setSavedText()方法不是在這個保存&使用還原狀態活動。它們在LocalSample Instrumentation示例中使用/調用。

忘記這兩種方法可以擦除它們。讓我們來看看這個樣本是如何工作的。在Android上調用onRestoreInstanceState()並使所有UI視圖保持它們的狀態爲方法的Bundle參數。請調試代碼並在旋轉屏幕後檢查此示例的onCreate()方法中的savedInstanceState參數。在該Bundle中的R.id.saved EditText的循環文本之前,您將看到。主要的訣竅是爲什麼EditText中的一個正在保存其狀態,而另一個則不是因爲EditText的屬性爲。 freezesText屬性使得EditText/TextView在onSaveInstanceState方法中保存其狀態。請查看here瞭解更多關於freezesText的信息。

刪除android:freezesText =「true」或從save_restore_state.xml中將其設置爲false或重寫onRestoreInstanceState方法,並且不要調用super.onRestoreInstanceState()並觀察它在旋轉後(配置更改)後是否失去其狀態。

注意:您不必重寫此示例的onRestoreInstanceState方法,但需要爲保存必須的活動的內部狀態的其他要求。

+0

非常感謝您的良好答案。我已經忘記了我提出的問題,有時要耐心等待。 – 2013-02-20 06:31:42