2011-05-17 58 views
6

我對Android生命週期很瞭解。我在這裏發帖是因爲我觀察到一個奇怪的行爲,無論如何這是我自己的想法。Android在配置更改後保留回調狀態

我的情況是這樣的:一個活動將使用一個簡單的佈局,只有一個EditText。在活動onCreate方法中,我將一些默認文本設置爲EditText以及該方法後面的部分,將TextWatcher分配給EditText,因此無論何時用戶鍵入任何內容,我都可以用我自己的方式進行響應。

一切都好,直到我旋轉屏幕。 TextWatcher回調開始對初始化EditText的代碼作出反應。

根據正常的代碼流程,TextWatcher在初始化EditText的文本值後稍後分配。所以它不應該因爲onCreate方法中的文本分配而觸發。

這裏有人可以解釋嗎?

回答

1

當你永遠旋轉的裝置稱爲活動的onCreate方法again.if要防止旋轉設備時要調用的onCreate做的清單

android:configChanges="orientation|keyboardHidden" 

,並在您的活動將下面的代碼

public void onConfigurationChanged(Configuration newConfig) 
{  
    super.onConfigurationChanged(newConfig);  

    if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE) 
    { 

    }  
    else if(newConfig.orientation==Configuration.ORIENTATION_PORTRAIT) 
    { 

    } 
} 
+0

與android:ConfigChanges就夠了,你只需要你的代碼活動,如果你想做某些特定的事情 – yeradis 2011-05-17 09:24:08

7

這就是爲什麼你看到此行爲:

  1. 當 '的onCreate' 方法是調用第一次編輯,它沒有保存狀態。這意味着BundlesavedInstanceState參數爲空。
  2. 當配置更改時,Android路徑中的非空值爲savedInstanceState參數。
  3. 配置更改後,onCreate返回,Android調用onRestoreInstateState
  4. 默認情況下,所有具有id的視圖正試圖恢復其狀態,EditText也恢復其狀態(實際上,TextView誰恢復了大部分狀態)。
  5. 在狀態恢復期間的某個地方(但在onCreate方法完成後),您的EditText控制系統會自行調用setText以恢復配置更改之前的文本。
  6. 您的TextWatcher您在onCreate方法中添加了此方法的通知。

只是爲了明確這一點,你 TextWatcher,你加在第一次調用onCreate,不保留!它的新的 TextWatcher,在上次調用onCreate時添加的,它接收文本更改通知。您可以自行檢查TextView.onRestoreInstanceState