2011-12-29 50 views
0

基本上我有一個列表,我需要記住偏移量,並在每次活動恢復時加載偏移量值,除非活動完全被破壞。之前您的活動被放置在背景和/或破壞活動狀態變化時從SharedPreferences存儲和檢索值

//Inside onCreate 
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
Offset = settings.getInt("TheOffset", 0); 
//End onCreate 

@Override 
protected void onPause() { 
    super.onPause(); 
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
    SharedPreferences.Editor editor = settings.edit(); 
    editor.putInt("TheOffset", Offset); 
} 
@Override 
protected void onStop() { 
    super.onStop(); 
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
    SharedPreferences.Editor editor = settings.edit(); 
    editor.putInt("TheOffset", Offset); 
} 
@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    //settings.getInt("TheOffset", 0); 
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
    SharedPreferences.Editor editor = settings.edit(); 
    editor.putInt("TheOffset", 0); 
} 
+0

那麼問題是什麼? – 2011-12-29 15:07:43

+0

@mbaird,你問我到底要問什麼。^_^ – neevek 2011-12-29 15:20:45

+0

LMAO ....抱歉,我還沒有吃過早餐。 這不工作,我不知道我是否正確地做。 – James 2011-12-29 15:23:25

回答

3

onPause()將永遠被調用,所以你不必保存狀態onStop()onDestroy()爲好。

要在SharedPreferences中保存狀態,需要在寫入值後添加editor.commit()。否則它不會被存儲。就像這樣:

super.onPause(); 
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
SharedPreferences.Editor editor = settings.edit(); 
editor.putInt("TheOffset", Offset); 
editor.commit(); 

你可以在這裏閱讀更多:http://developer.android.com/reference/android/app/Activity.html#SavingPersistentState

+0

這工作謝謝,我忘了提交()。也感謝關於州的提示。 – James 2011-12-29 15:36:31

+0

我推薦使用apply()而不是commit()。看到這個stackoverflow線程︰https://stackoverflow.com/questions/5960678/whats-the-difference-between-commit-and-apply-in-shared-preference – Dika 2018-03-08 20:06:13

0

你只需要保存的onResume(你的偏移量)並將其設置爲0時,該活動將被破壞,你可以通過使用的onPause(isFinishing()),像下面講:

protected void onPause() { 
    if(isFinishing()) { 
     SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
     SharedPreferences.Editor editor = settings.edit(); 
     editor.putInt("TheOffset", 0); 
     editor.commit(); 
    } 
} 

...但我仍然不知道你想達到的目標。

相關問題