1
変更された後に、共有設定である末尾のスラッシュをurl
という名前で削除したいとします。設定値のフォーマットonSharedPreferenceChanged
正常に動作しているようですが、私のコードでは、すべてのEditTextPreferencesの値が変更された後、その概要を更新しています。
私の問題は、末尾のスラッシュがurl
から削除されていても、プリファレンスアクティビティを閉じて再度開くまでEditTextPreferenceサマリーに変更が実際に表示されないということです。
apply()
の代わりにcommit()
を試してみましたが、役に立たなかった。
public class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
private static final String TAG = "SettingsFragment";
@Override
public void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
getPreferenceScreen().removePreference(findPreference("service_running"));
}
@Override
public void onResume() {
super.onResume();
for (int i = 0; i < getPreferenceScreen().getPreferenceCount(); i++) {
Preference preference = getPreferenceScreen().getPreference(i);
updatePreference(preference);
}
}
@Override
public void onSharedPreferenceChanged (SharedPreferences sharedPreferences, String key) {
// remove trailing slashes from url
if (key.equals("url")) {
String value = sharedPreferences.getString(key, "");
if (value.endsWith("/")) {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(key, value.substring(0, value.length() - 1));
editor.apply();
}
}
updatePreference(findPreference(key));
}
private void updatePreference (Preference preference) {
if (preference instanceof EditTextPreference) {
EditTextPreference editTextPreference = (EditTextPreference)preference;
editTextPreference.setSummary(editTextPreference.getText());
}
}
}