【发布时间】:2013-02-13 09:21:29
【问题描述】:
我有一个将值存储到 SharedPreferences 的 PreferenceActivity P。这是可行的——我能够从列表中进行选择,并且正确显示汇总值。
问题是当我尝试访问 Activity A 中的 SharedPreference 值时。加载的是 default 值而不是存储的值。只有在我从活动 A 访问 PreferenceActivity 之后,活动 A 才能使用最新的 SharedPreference 值。有关如何解决此问题的任何建议?有没有使用 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]
这是 Activity 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]
【问题讨论】:
-
您是否随时提交更改?添加它们是不够的。
-
您是否使用 PreferenceManager.setDefaultValues() 加载默认值?
-
@Clyde:我刚刚尝试使用 PreferenceManager.setDefaultValues() 但它对问题没有影响。
-
@EfEs:我添加了提交,但这对问题没有影响。正如我在问题中提到的,偏好值已在 PreferenceActivity 中设置。但是要获取这些值,目前需要执行 startActivity(new Intent(this, P.class))。如果不访问 PreferenceActivity,我无法弄清楚如何获取已设置的值。在 PreferenceActivity 中,我没有对值进行任何更改,但是一旦我返回 Activity A,它们就会神奇地可用,而不是默认值。
-
它们在同一个包中吗?
标签: android sharedpreferences preferenceactivity onresume