2011-02-26 39 views
0

在我的Android應用程序,用戶可以輸入在EditView中的文本和上一個按鈕,帶他到其他活動,他可以選擇一個聯繫人,點擊...,然後按下一個按鈕, 帶來他回到第一活動...在活動切換期間保留視圖中的數據?

現在的問題是我需要通過選定的聯繫人的第一個活動,並顯示它(我還用包做了),但我無法保留在EditView中已經輸入的文本.. 。這是我應該做的(但文本應與出通過它通過捆綁並獲得回被保留)

謝謝:)

回答

1

的在視圖組件文本是自動由OS保存,甚至是殺軟後(用戶更改手機方向),而不是硬殺傷後,用戶點擊後退按鈕,同時父活動成爲關注焦點。所以,除非你在做非標準的事情,比如在不調用super.onSaveInstanceState的情況下調用onSaveInstanceState,那麼視圖狀態中的數據應該保持不變。

解決方案之一是在啓動子活動之前將視圖組件中的文本保存爲非視圖實例屬性,並在焦點返回到onActivityResult方法中的父活動時再讀取該值。

JAL

編輯:Android Docs Activity頁面已經被廣泛地更新。如果小部件沒有ID,則視圖狀態不會被保存。

編輯:我想說的是,視圖狀態應該由操作系統來保留。您不需要手動保存視圖狀態。如果這是一項艱鉅的任務,那麼如果這是該活動的預期行爲,則需要保存活動的狀態。所以這是一些保存活動狀態的代碼。給定一個實例變量:

String password; 

在這裏,我們節省了一個殺軟狀態:

protected void onSaveInstanceState(Bundle outState){ 
     password= editTextPassword.getText().toString(); 
     outState.putString("password", password); 
     super.onSaveInstanceState(outState); // save view state 
    } 

這裏我們保存在硬態殺

@Override 
protected void onStop(){ 
    super.onStop(); 

    SharedPreferences prefs = getPreferences(MODE_PRIVATE); 
    SharedPreferences.Editor editor = prefs.edit(); 
    editor.putString("password",password); 
    editor.commit(); 

在這裏,我們的onCreate恢復狀態( Bundle savedInstanceState):

if(savedInstanceState!= null){ // get saved state from soft kill after first pass 
    try { 
     password= savedInstanceState.getString("password"); 
     Log.d(TAG,"RestoredState!"); 
    } 
    catch(Exception e){ 
     Log.d(TAG,"FailedToRestoreState",e); 
    } 
} 
else { // get saved state from preferences on first pass 
    SharedPreferences prefs = getPreferences(MODE_PRIVATE); // singleton 
    if (prefs != null){ 
     this.password= prefs.getString("password","");  
     Log.d(TAG,"gettingPrefs"); 
    } 
} 
Log.d(TAG,"onCreate"); 

此外鑑於IF的onSaveInstanceState被稱爲會的onStop之前調用,也可以使用標誌isSavedInstanceState和isSavedPreferences寫首選項僅在硬殺傷,如果你的onResume復位標誌爲:

protected void onResume() { 
    super.onResume(); 
    Log.d(TAG,"onResume"); 
    isSavedInstanceState= false; 
    isSavedPrefs= false; 
} 

設定的onCreate標誌不會產生期望的結果。

+0

如何在視圖組件中的文本保存爲一個非視圖即時財產...ü可以給我一些例子請:) – kAnNaN 2011-02-26 12:49:17

+0

@kAnNaN我編輯我的回答表現出一定的代碼。希望有所幫助。 – JAL 2011-02-26 21:29:17