Я хочу удалить трейлинг-косые черты из общего назначения под названием url
после его изменения.Значения предпочтений форматирования onSharedPreferenceChanged
Кажется, что все работает нормально, но в моем коде я обновляю сводку всех EditTextPreferences после их изменения, чтобы содержать их значения.
Моя проблема в том, что, хотя конечная косая черта удалена из url
, я фактически не вижу изменений в сводке EditTextPreference, пока не закрою и не открою активность предпочтений.
Я пытался использовать commit()
вместо apply()
, и это не помогло.
Вот мой код:
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());
}
}
}