Android偏好设置迁移后EditTextPreference值无法显示求助
偏好设置迁移后值不显示的解决办法
针对禁用的「Compte」字符串偏好不显示账户名的问题
在新的PreferenceFragmentCompat体系里,禁用的EditTextPreference不会自动把保存的值显示出来,得手动绑定summary:
- 打开你的偏好Fragment,在
onCreatePreferences里找到这个偏好,添加这段代码:
val comptePref = findPreference<EditTextPreference>("compte_key") // 替换成你XML里的实际key comptePref?.run { // 先把当前保存的值设为summary summary = text // 后续值变化时自动更新summary setOnPreferenceChangeListener { _, newValue -> summary = newValue as String true } }
- 要是想在XML里配置,也可以写
android:summary="%s",但禁用状态下有时候不会自动触发summary更新,还是代码绑定更可靠。
针对可编辑的「Nom de jours」整数偏好不显示数值的问题
默认EditTextPreference不会自动把整数转成字符串显示在summary上,得手动处理类型转换:
- 同样在Fragment的
onCreatePreferences里处理:
val joursPref = findPreference<EditTextPreference>("jours_key") // 替换成实际key joursPref?.run { // 初始显示已保存的数值,注意空值判断 text?.let { summary = it } // 值变化时更新summary,顺便做整数校验 setOnPreferenceChangeListener { _, newValue -> val num = (newValue as String).toIntOrNull() ?: 0 summary = num.toString() true } }
- 另外记得在XML里给这个偏好设置
android:inputType="number",防止输入非数字内容,也可以加android:summary="%s",但要确保值能正确转成字符串填充进去。
额外排查要点
- 确认你使用的是
androidx.preference:preference库,旧的android.preference已被弃用,新库的组件行为和旧版存在差异。 - 检查XML中偏好的
key和代码里读取的是否一致,也可以通过调试查看SharedPreferences里是否正确保存了对应的值。 - 禁用状态的偏好,新库不会自动更新summary,必须手动绑定值到summary。
内容的提问来源于stack exchange,提问作者Chris972
相关产品推荐
相关产品推荐

