根据logcat的调用顺序是onCreate,setViewValues,setStrikethroughFlag,(ROTATE),onCreate,setViewValues:
SharedPreferences mSettings;
Editor spEditor;
@Override
public void onCreate(Bundle savedInstanceState) {
....
mSettings = getSharedPreferences("prefs", "")
spEditor = mSettings.edit();
setViewValues();
}
public void setViewValues() {
boolean isStrikeThru = mSettings.getBoolean(STRIKETHROUGH, false);
Log.d("TRACE", "setViewValues, strikethrough " + isStrikeThru);
}
public void setStrikethroughFlag() {
spEditor.putBoolean(STRIKETHROUGH, true);
spEditor.commit();
}
logcat表示调用了setStrikethroughFlag()。然后我旋转屏幕,调用onCreate和setViewValues。在setViewValues中,我认为它会识别STRIKETHROUGH的保存值,为true。但logcat跟踪表明isStrikeThru的值为false。
答案 0 :(得分:0)
从知道我可以看到,您在onCreate()
中创建了局部变量
在您的setViewValues()
中,您访问了您的类字段变量。
所以我不确定你是否在你的字段变量上调用getSharedPreferences()
。
您的spEditor
也是如此。解决此问题并再试一次。
如果这对您没有帮助,请提供其余代码。
更新
试试这个mSettings = getSharedPreferences("prefs", Context.MODE_PRIVATE);
答案 1 :(得分:0)
尝试从构造函数中调用setViewValues()。在屏幕方向更改时,将再次调用活动的oncreate并重置您的值。
答案 2 :(得分:0)
错误是在存储我的共享偏好时使用密钥周围的引号。钥匙没有匹配所以没有任何东西被持续存在,抱歉。