我有一个将值存储到SharedPreferences的PreferenceActivity P.这是有效的 - 我可以从列表中进行选择,并正确显示汇总值。
问题是当我尝试访问活动A中的SharedPreference值时。将加载默认值而不是存储的值。只有在之后我从活动A访问PreferenceActivity时,最新的SharedPreference值才可用于活动A.有关如何解决此问题的任何建议吗?有没有使用PreferenceManager.getDefaultSharedPreferences的选项?
以下是PreferenceActivity代码的大部分内容(为简洁起见,我省略了onSharedPreferenceChanged侦听器):
public class P extends PreferenceActivity {
public static String KEY_PREF_show_watch_areas, KEY_PREF_time_format, KEY_PREF_date_format;
String PREF_show_watch_areas, PREF_time_format, PREF_date_format;
static SharedPreferences sharedPrefs;
Preference pref_show_watch_areas=null;
ListPreference pref_time_format=null, pref_date_format=null;
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sharedPrefs = PreferenceManager.getDefaultSharedPreferences( getApplicationContext() );
KEY_PREF_show_watch_areas = getString(R.string.key_pref_show_watch_areas);
KEY_PREF_time_format = getString(R.string.key_pref_time_format);
KEY_PREF_date_format = getString(R.string.key_pref_date_format);
PREF_show_watch_areas = getString(R.string.pref_show_watch_areas);
PREF_time_format = getString(R.string.pref_time_format);
PREF_date_format = getString(R.string.pref_date_format);
//Load up the preference items (from XML)
addPreferencesFromResource(R.xml.preferences);
//DATE pref
pref_date_format = (ListPreference) findPreference(KEY_PREF_date_format); //Set summary to user selected value
pref_date_format.setSummary(pref_date_format.getEntry() );
//TIME pref
pref_time_format = (ListPreference) findPreference(KEY_PREF_time_format); //Set summary to show user selected value
pref_time_format.setSummary(pref_time_format.getEntry());
}
} // [END P]
以下是活动A中的onResume:
@Override
protected void onResume() {
super.onResume();
SharedPreferences sharedPrefsResume = PreferenceManager.getDefaultSharedPreferences(getApplicationContext() );
dateFormatPref = sharedPrefsResume.getString(P.KEY_PREF_date_format, "d-MMM-yy");
timeFormatPref = sharedPrefsResume.getString(P.KEY_PREF_time_format, "h");
} // [END onResume]
答案 0 :(得分:0)
我发现并解决了这个问题。我试图使用未初始化的变量(例如,P.KEY_PREF_date_format)访问SharedPrefs值。这就是返回默认值的原因。我现在已经将静态变量移动到我的MainActivity以确保它们被初始化。瞧。 SharePreferences现在按预期工作。