Codename One - PickerComponent的验证器

时间:2018-05-08 22:26:53

标签: codenameone

在以下代码中,PickerComponent的验证器" date"永远不会在模拟器上使用" GooglePixel2.skin"执行,而是使用" iPhoneX.skin"执行。为什么? 在日志中没有字符串"执行日期的验证器"在Android上(在模拟器中)选择一个日期后,该字符串将连续记录在iPhone上(在模拟器中)。我的代码不正确吗?

我尝试按照这个例子:https://www.codenameone.com/javadoc/com/codename1/ui/layouts/TextModeLayout.html

   public void show(Form backForm) {

        TextModeLayout textModeLayout = new TextModeLayout(4, 1);
        Container inputPersonData = new Container(textModeLayout);

        TextComponent name = new TextComponent().label("Nome");
        TextComponent surname = new TextComponent().label("Cognome");
        PickerComponent gender = PickerComponent.createStrings("Maschio", "Femmina", "altro");
        PickerComponent date = PickerComponent.createDate(new Date());

        Validator val = new Validator();
        val.addConstraint(name, new LengthConstraint(2));
        val.addConstraint(surname, new LengthConstraint(2));
        val.addConstraint(date, new Constraint() {
            @Override
            public boolean isValid(Object value) {
                Log.p("Validator of date executed");
                boolean res = false;
                if (value instanceof Date) {
                    Calendar birthday = Calendar.getInstance();
                    birthday.setTime((Date) value);
                    Calendar nowLess13years = Calendar.getInstance();
                    nowLess13years.setTime(new Date());
                    nowLess13years.add(Calendar.YEAR, -13);
                    if (birthday.before(nowLess13years) || birthday.equals(nowLess13years)) {
                        res = true;
                    }
                }
                return res;
            }

            @Override
            public String getDefaultFailMessage() {
                return "You must be at least 13 years old";
            }
        });

        inputPersonData.add(name);
        inputPersonData.add(surname);
        inputPersonData.add(gender);
        inputPersonData.add(date);

        add(inputPersonData);
        super.show();

        Log.p("Registry Form shown correctly");

    }

1 个答案:

答案 0 :(得分:1)

这似乎是验证器代码和选择器组件中的错误。只有在我编辑其中一个字段而不管皮肤后,它才适用于我。我已修复此问题以便在任何地方正确绑定。