2011-12-29 53 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(); 
    } 
} 

...但我仍然不知道你想达到的目标。

相关问题