Android を初めて使用し、現在環境設定に取り組んでいるときに、次の疑問がありました。API は次のように述べています : http://developer.android.com/reference/android/content/SharedPreferences.html設定値が一貫した状態に保たれるようにするための .Editor オブジェクト
しかし、別のリンクでは、次のコード スタイルに従います。
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals(KEY_PREF_SYNC_CONN)) {
Preference connectionPref = findPreference(key);
connectionPref.setSummary(sharedPreferences.getString(key, ""));
}
}
edit と commit を使用せずに 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());
}
}
}