android - 保存前如何格式化 onPreferenceChangeListener 中的值?
问题描述
我EditTextPreference
在我PreferenceScreen
的字段中有一个我必须保存用户必须输入一个有效的 URL,因为该 url 将用于改造调用,我必须正确格式化它。
所以我创建了一个onPreferenceChangeListener
地方,我最初检查 url 插入是否有效,然后我正在格式化它。
问题是一旦用户按下ok格式化的值就不会被保存,任何值都不会被保存。
这是我的听众:
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
}
}
解决方案
请注意,是否可以存储OnPreferenceChangeListener
return true
/ if 值。即使 URL 匹配模式,false
您也会返回。false
你应该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
}
推荐阅读
- java - 计算地图地图中的列表总和
- python - Python Boto3 在 us-east-1 和 us-east-2 中的存储桶的 AWS S3 预签名 URL 响应存在差异
- c++ - Qt Qml 如何将QSG_INFO参数的值设置为1
- python - mongo insert_one 给出错误,但插入有效(仅弃用警告)
- angular - 我需要一些帮助才能在 Angular 中编写嵌套的 ngFor 循环
- express - 如何在没有传输编码的情况下代理数据:分块?
- amazon-cloudwatch - 在 AWS Log Insights 图表中将空 bin 显示为零值
- r - 我在 3 个不同的时间点收集了 7 个不同的病毒浓度数据点。如何用 R 中的误差线绘制它?
- ansible - Ansible Tower/AWX 错误?作业任务串行而不是并行运行
- html - 如何使用选择器(无 js)定位特定 div