Как обращаться с Focuschangelistener в blackberry для этой ситуации? - PullRequest
0 голосов
/ 19 ноября 2009

У меня есть три EditField, у меня есть набор focuslistener для одного только второго поля редактирования. когда фокус потерян, я проверяю, является ли поле пустым или нет, если поле пустое, оно покажет всплывающее сообщение. Теперь проблема в том, что как только пользователь пришел в это поле, он не мог перейти в другие поля, не вводя никаких полей, но Я хочу, чтобы пользователь мог перейти в поле, которое находится выше этого поля, и он не мог перейти в поле ниже. Как справиться с этой ситуацией? Пожалуйста, поделитесь своими идеями.

1 Ответ

2 голосов
/ 20 ноября 2009

Я полагаю, это для проверки функциональности? См. Предложенную стратегию проверки: у нас есть интерфейс IValidated, который можно проверить на правильность данных:

interface IValidated {
 public boolean validate();
}

Теперь любое поле, например, список, флажок или выбор, могут его реализовать.
Далее, в каждом поле есть событие onFocus, в котором вы можете проверить предыдущее поле 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);
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...