Блок прослушивания регистрируется с и получает уведомления от Displayable, а не от источника события (такого, как клавиша кнопочной панели). Поэтому блок прослушивания должен идентифицировать и «выбрать» команду, в которой он заинтересован, среди всех возможных Command, связанных экраном, отображаемым в настоящее время.
Вы, программист, должны убедиться, что вы должным образом связали поведение какого-либо блока прослушивания с должными Command. Вы должны использовать ин-. формацию, доступную в объекте Command, для ясной идентификации Command.
Чтобы исправить ошибку в последней версии программы, я переписываю метод commandAction () в классе MyCommandListener, как показано в листинге 4.2.
Листинг 4.2. Блок прослушивания команд теперь различает команды, исследуя их метки
public void commandAction(Command c, Displayable d)
if (c == showAlert)
{
alert = new Alert("Button pressed", "The '" + ALERT_LABEL +
"' button was pressed", null, AlertType.INFO); ) else if (c == sayHi)
alert = new Alert("Button pressed", "The " +
"'Say Hi' button was pressed", null, AlertType.INFO);
}
alert.setTimeout(Alert.FOREVER); display.setCurrent(alert, form);
}
Здесь все еще только один CommandListener на Screen - и может быть только один. Его метод commandAction () вызывается в ответ на нажатие любой клавиши. Но теперь он проверяет контекст уведомления объекта Command и выдает различные уведомления соответственно.