如何在这种情况下处理黑莓中的Focuschangelistener?

时间:2009-11-19 08:22:45

标签: user-interface validation blackberry

我有三个EditField我只为第二个editfield设置了一个focuslistener。当焦点丢失时,我正在检查字段是否为空,如果该字段为空,它将显示弹出消息。现在问题是,一旦用户来到该字段,他无法在不输入任何字段的情况下移动到其他字段但是我希望用户可以移动到该字段上方的字段,他无法移动到下面的字段。如何处理这种情况?请分享你的想法。

1 个答案:

答案 0 :(得分:2)

我想这是验证功能吗? 请参阅建议的验证策略:我们有接口IValidated,可以检查正确的数据:

interface IValidated {
 public boolean validate();
}

现在,任何字段,如列表或复选框或选项都可以实现它 接下来,每个字段都有onFocus事件,如果失败,你可以验证prevouse IValidated字段和setFocus。

请参阅EditField示例:

class ValidatedEdit extends BasicEditField implements IValidated {
 private static final String EMPTY_STRING = "";

 public ValidatedEdit(String label, String value) {
  super(label, value);
 }

 protected void onFocus(int direction) {
  // it's from upper field
  if (direction > 0 && getIndex() > 0) {
   // get upper field
   Field field = getManager().getField(getIndex() - 1);
   // if its IValidated
   if (field instanceof IValidated) {
    IValidated validated = (IValidated) field;
    // validate, if false set focus to IValidated
    if (!validated.validate()) {
     field.setFocus();
     return;
    }
   }
  }
  super.onFocus(direction);
 }

 public boolean validate() {
  return !getText().equalsIgnoreCase(EMPTY_STRING);
 }
}

使用示例:

class Scr extends MainScreen {
 ValidatedEdit mEditField1 = new ValidatedEdit("field#1", "");
 ValidatedEdit mEditField2 = new ValidatedEdit("field#2", "");
 ValidatedEdit mEditField3 = new ValidatedEdit("field#3", "");

 public Scr() {
  add(mEditField1);
  add(mEditField2);
  add(mEditField3);
 }
}