Java 已更改共享首选项上的格式首选项值

Java 已更改共享首选项上的格式首选项值,java,android,Java,Android,我想在一个名为url的共享首选项被更改后,删除其尾部斜杠 它似乎工作得很好,但在我的代码中,我正在更新所有EditTextPreferences的摘要,在它们被更改为包含它们的值之后 我的问题是,即使从url中删除了尾随斜杠,但在关闭并重新打开首选项活动之前,我实际上看不到EditTextPreference摘要中的更改 我尝试使用commit()而不是apply(),但没有效果 这是我的密码: public class SettingsFragment extends PreferenceFr

我想在一个名为
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());
        }
    }
}
公共类设置片段扩展首选项片段实现SharedReferences.OnSharedPreferenceChangeListener{
私有静态最终字符串标记=“SettingsFragment”;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
getPreferenceScreen().GetSharedReferences().RegisterOnSharedReferenceChangeListener(此);
getPreferenceScreen().removePreference(FindReference(“正在运行的服务”);
}
@凌驾
恢复时公开作废(){
super.onResume();
对于(int i=0;i
使用
setText
而不是
编辑器解决了问题

代码:


使用
setText
而不是
编辑器解决了该问题

代码:

    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));
        }
    }