所以,我的应用程序中有两个活动 - StartActivity和SettingsActivity。
在StartActivity(启动活动)中 - 我从SharedPref读取级别和声音值。如果它们未设置,我将它们设置为默认值,否则我将获取找到的值。以下代码位于StartActivity的OnCreate内。
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
String levelValue = sharedPref.getString(getString(R.string.levelpref), null);
String soundValue = sharedPref.getString(getString(R.string.soundpref), null);
if(levelValue == null)
{
String levelDefaultValue = (getResources().getStringArray(R.array.level))[0];
String soundDefaultValue = (getResources().getStringArray(R.array.sound))[0];
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString(getString(R.string.levelpref), levelDefaultValue);
editor.putString(getString(R.string.soundpref), soundDefaultValue);
editor.apply();
}
在SettingsActivity中,我有一个保存按钮,用于保存声音和级别的新设置值
public void saveSettings(View v)
{
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString(getString(R.string.levelpref), level);
editor.putString(getString(R.string.soundpref), sound);
editor.apply();
}
现在,当我启动我的应用程序时 - StartActivity启动 - 看到声音和级别的SharedPref值未设置,因此指定了默认值。接下来,我转到设置活动,为声音和级别设置新值并保存(从调试器我能够验证是否设置了新值)。
但是,当我回到StartActivity时,SharedPref值由于某种原因重置回之前设置的默认值。从SO讨论中,我读到使用getDefaultSharedPreferences应保留活动之间的值。
关于问题是什么的任何想法?
Min-sdk版本:11 Target-sdk版本:18
答案 0 :(得分:1)
我发现每次在onResume上都要重新打开PreferenceManager.getDefaultSharedPreferences(this),或者在可能的变化后检查。
答案 1 :(得分:0)
我认为您使用两个不同的SharedPrefrence
,因为您使用的与上下文相关的方法和上下文在2个活动上是不同的,或者您不保存编辑器对象。也许这段代码可以帮助你:
SharedPreferences setting = getSharedPreferences("HomeSetting", 0);
Editor editor = setting.edit();
editor.putBoolean(SERVICE_ON_VALUE, false);
editor.commit();
希望有用:)