我希望在更改后的名为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());
}
}
}
答案 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));
}
}