2017-02-08 4 views
1

Я хочу удалить трейлинг-косые черты из общего назначения под названием 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()); 
     } 
    } 
} 

ответ

0

Использование setText вместо Editor решен вопрос.

Код:

if (key.equals("url")) { 
     String value = sharedPreferences.getString(key, ""); 

     if (value.endsWith("/")) { 
      EditTextPreference editTextPreference = (EditTextPreference)findPreference(key); 
      editTextPreference.setText(value.substring(0, value.length() - 1)); 
     } 
    } 
Смежные вопросы