I have an EditTextPreference in my PreferenceScreen in the field i have to save the user have to input a valid URL and as that url will be used for retrofit calls i have to format it properly.
So i've created a onPreferenceChangeListener where initially i check if the url insert is valid and then i'm formatting it.
The issue is that once the user press ok the formatted value is not saved, no value is saved at all.
Here is my listener:
private fun String.formatURL(): String {
var url = this
if (!this.startsWith("http")) {
url = "http://$url"
}
if (!url.endsWith("/")) {
url = "$url/"
}
return url
}
editPref?.onPreferenceChangeListener =
Preference.OnPreferenceChangeListener { preference, newValue ->
val url = newValue.toString()
if (Patterns.WEB_URL.matcher(url).matches()) {
preference.sharedPreferences.edit().putString(preference.key, url.formatURL())
false
} else {
customSnack(requireView(), "URL del server non valido!", true)
false
}
}
note that
OnPreferenceChangeListenerreturntrue/falseif value can be stored or not. you are returningfalseeven whe URL matches pattern. you should returntruethen