繁体   English   中英

如何拒绝onSharedPreferenceChanged()侦听器中的更改

[英]How to reject a change in onSharedPreferenceChanged() listener

onSharedPreferenceChanged()侦听器没有要返回的布尔类型,因为onPreferenceChanged()侦听器具有。

那么如何在验证后拒绝更改?

发生在我身上的唯一方法是将所有共享首选项保存在局部变量中,如果验证失败,则从局部变量中恢复该值,如果它通过则更新局部变量。

这是双重工作吗? 是否存在拒绝的内置机制?

这是双重工作吗?

我认同。 如果代码的一部分要拒绝此更改,为什么代码的另一部分允许它?

是否存在拒绝的内置机制?

用户输入应在onPreferenceChangeonPreferenceChange之前进行验证。 看起来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.

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