我是 android 的新手,目前在处理首选项时,我有以下疑问,API 说明如下: http://developer.android.com/reference/android/content/SharedPreferences.html 对首选项的修改必须通过 SharedPreferences.Editor 对象以确保首选项值保持一致状态
但在另一个link ,遵循如下代码风格:
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals(KEY_PREF_SYNC_CONN)) {
Preference connectionPref = findPreference(key);
connectionPref.setSummary(sharedPreferences.getString(key, ""));
}
}
那么在不使用编辑和提交的情况下编辑 Preference obj 可以吗?
编辑
编辑了代码
问题是我无法在摘要中设置默认值 这是我用来解决这个问题的完整代码....
public class Settings extends PreferenceActivity implements
OnSharedPreferenceChangeListener {
//initializations
protected void onCreate(Bundle savedInstanceState) {
bla bla
PreferenceManager.setDefaultValues(getBaseContext(), R.xml.preferences, false);
addPreferencesFromResource(R.xml.preferences);
keys = getResources().getStringArray(R.array.prefKeys);
p = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
//Gets the keys of the preferences
for (int i = 0; i < keys.length; i++) {
setSummary(p, keys[i]);
}
}
//Listener to detect changes
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
Preference p = findPreference(key);
if (p instanceof EditTextPreference) {
p.setSummary(sharedPreferences.getString(key,(String) p.getSummary()));
}
else if (p instanceof ListPreference) {
p.setSummary((String) ((ListPreference) p).getEntry());
}
}
//First time initialization
private void setSummary(SharedPreferences sharedPreferences, String key) {
Preference p = findPreference(key);
if (p instanceof EditTextPreference) {
//This was the mistake I did
//p.setSummary(sharedPreferences.getString(key,(String) p.getSummary()));
p.setSummary(((EditTextPreference) p).getText());
}
else if (p instanceof ListPreference) {
//This was the mistake I did
//p.setSummary((String) ((ListPreference) p).getEntry());
p.setSummary((String) ((ListPreference) p).getEntry());
}
}
}
最佳答案
Preference
和 SharedPreferences
不一样。但是,它们经常一起使用。
Preference
是用于显示和编辑用户首选项的 UI 类。
SharedPreferences
是用于持久化应用程序设置的非 UI 类。要更改这些设置,您需要使用 edit()
获取一个 SharedPreferences.Editor
实例,然后使用 commit()
存储更改。
通常,Preference
值存储在 SharedPreferences
中。
关于android + 共享首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15879306/