![](/img/trans.png)
[英]onSharedPreferenceChanged Invocation for UI Change or Internal
[英]How to reject a change in onSharedPreferenceChanged() listener
onSharedPreferenceChanged()
侦听器没有要返回的布尔类型,因为onPreferenceChanged()
侦听器具有。
那么如何在验证后拒绝更改?
发生在我身上的唯一方法是将所有共享首选项保存在局部变量中,如果验证失败,则从局部变量中恢复该值,如果它通过则更新局部变量。
这是双重工作吗? 是否存在拒绝的内置机制?
这是双重工作吗?
我认同。 如果代码的一部分要拒绝此更改,为什么代码的另一部分允许它?
是否存在拒绝的内置机制?
用户输入应在onPreferenceChange
在onPreferenceChange
之前进行验证。 看起来onSharedPreferenceChanged
的目的不是验证,而是在提交更改时接收只读实时更新。
由于其他代码可以接收此回调并对其执行操作,因此在此回调期间验证为时已晚。
参考(Preference javadoc):
此类提供要在活动中显示的视图,并与SharedPreferences关联以存储/检索首选项数据
基本上,如果不满足您的要求,您可以使用setText
将值返回到默认值。 然后,您可以显示Toast或其他任何内容以通知用户该问题。
这是解决方案:
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
{
if ("mypref".equals(key)) {
String value = sharedPreferences.getString(key, "");
try {
int v = Integer.parseInt(value);
// do whatever is needed
} catch (RuntimeException e) {
String deflt = ... # fetch default value
EditTextPreference p = (EditTextPreference) findPreference(key);
p.setText(def);
}
}
}
图片来源: http : //androidfromscratch.blogspot.ca/2010/11/validating-edittextpreference.html
您可以使用编辑器:( http://developer.android.com/reference/android/content/SharedPreferences.html#edit() ),它允许以原子方式进行更改,然后仅在一切正确时调用commit。 我希望这有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.