格式化偏好值onSharedPreferenceChanged

时间:2017-02-08 01:10:23

标签: java android

我希望在更改后的名为url的共享首选项中删除尾部斜杠。

它似乎工作正常,但在我的代码中,我更新了所有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());
        }
    }
}

1 个答案:

答案 0 :(得分: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));
        }
    }