检查并更新 PreferenceActivity 中的偏好值
Check and update preference value in PreferenceActivity
各位开发者大家好,
我正在开展一个 android 项目,需要将用户名存储在共享首选项中。并在用户尝试更新应用程序设置中的 his/her 名称时进行一些验证,我为此首选项使用 EditTextPreference,并且我正在实施 onPreferenceChangeListner 以获取更新的值并对更新的值进行一些验证
这是我的听众
@Override
public boolean onPreferenceChange(Preference preference, Object object) {
String value = object.toString().trim();
preference.setSummary(value);
if (value.isEmpty()) { // this block works as expected
preference.getEditor().clear().apply();
Log.i("pref_old", preference.getExtras().getString("key", "-- old value cleared --")); // this always shows old value cleared - as expected
return false;
}
preference.getEditor().putString("key", value).apply(); // this doesn't seems to be updating the value
Log.i("pref_new", preference.getExtras().getString("key", "-- new value not created --")); // this always show "new value not created", but it should show updated value
return true;
}
在这个监听器中,我想要完成的是 trim 用户输入的内容,之后如果字符串变为空,则删除首选项值并更新首选项
如果不是,则更新首选项中的 trimmed 值,
但问题是,在用户输入值后,在 trimming 之后,它的值不会在共享首选项中更新。 (在函数的第二部分)
似乎我们需要始终 return false,如果我们在 onPreferencechange 中更改偏好值并手动更新偏好值
我仍然不明白为什么在我尝试记录新值时优先考虑值后它不会显示更新值,但在其他 activity 调用相同值的地方我可以去那里确认任一值都有改变与否
但我的问题的解决方案总是 return false 并手动更新偏好值。
各位开发者大家好, 我正在开展一个 android 项目,需要将用户名存储在共享首选项中。并在用户尝试更新应用程序设置中的 his/her 名称时进行一些验证,我为此首选项使用 EditTextPreference,并且我正在实施 onPreferenceChangeListner 以获取更新的值并对更新的值进行一些验证 这是我的听众
@Override
public boolean onPreferenceChange(Preference preference, Object object) {
String value = object.toString().trim();
preference.setSummary(value);
if (value.isEmpty()) { // this block works as expected
preference.getEditor().clear().apply();
Log.i("pref_old", preference.getExtras().getString("key", "-- old value cleared --")); // this always shows old value cleared - as expected
return false;
}
preference.getEditor().putString("key", value).apply(); // this doesn't seems to be updating the value
Log.i("pref_new", preference.getExtras().getString("key", "-- new value not created --")); // this always show "new value not created", but it should show updated value
return true;
}
在这个监听器中,我想要完成的是 trim 用户输入的内容,之后如果字符串变为空,则删除首选项值并更新首选项 如果不是,则更新首选项中的 trimmed 值, 但问题是,在用户输入值后,在 trimming 之后,它的值不会在共享首选项中更新。 (在函数的第二部分)
似乎我们需要始终 return false,如果我们在 onPreferencechange 中更改偏好值并手动更新偏好值 我仍然不明白为什么在我尝试记录新值时优先考虑值后它不会显示更新值,但在其他 activity 调用相同值的地方我可以去那里确认任一值都有改变与否 但我的问题的解决方案总是 return false 并手动更新偏好值。