简体   繁体   English

保存前如何格式化 onPreferenceChangeListener 中的值?

[英]How to format value in onPreferenceChangeListener before saving?

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.我在我的PreferenceScreen字段中有一个EditTextPreference我必须保存用户必须输入有效的 URL 并且 url 将用于 ZBD279364F96CA539A79389D549 调用正确格式化它。

So i've created a onPreferenceChangeListener where initially i check if the url insert is valid and then i'm formatting it.所以我创建了一个onPreferenceChangeListener ,最初我检查 url 插入是否有效,然后我正在格式化它。

The issue is that once the user press ok the formatted value is not saved, no value is saved at all.问题是一旦用户按下ok格式化的值就不会被保存,任何值都不会被保存。

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 OnPreferenceChangeListener return true / false if value can be stored or not.请注意OnPreferenceChangeListener如果可以存储值,则返回true / false you are returning false even whe URL matches pattern.即使 URL 匹配模式,您也会返回false you should return true then那么你应该返回true

    if (Patterns.WEB_URL.matcher(url).matches()) {
        preference.sharedPreferences.edit().putString(preference.key, url.formatURL())
        true // proper URL, storing, handled
    } else {
        customSnack(requireView(), "URL del server non valido!", true)
        false
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM