В BlackBerry, если вы планируете генерировать эти события из элементов пользовательского интерфейса (ButtonField, ListField и т. Д.), Они все поставляются с Field.setChangeListener (FieldChangeListener), так что вам просто нужно подключить слушатель к этому. Если вы хотите, чтобы это было что-то, что реагирует на такие вещи, как ввод-вывод или обработка, вы можете использовать классы Event и EventListener для этого. Лично я думаю, что они немного больше, чем мне нужно для простых уведомлений, поэтому я обычно делаю свои собственные простые интерфейсы.
Допустим, у вас есть класс, расширяющий поток, который подключается к веб-службе для загрузки файла XML, в котором перечислены состояния и их столицы. и обрабатывает это. Вы можете создать интерфейс EventGenerator с абстрактными методами public void addEventHandler(EventHandler)
и protected void notifyHandlers(Object obj)
. Внутри этого у вас есть Vector, в котором хранятся EventHandlers, через которые ваш notifyHandlers()
может пройти цикл и отправить вызов на handler.handleEvent(Object)
. Когда вы закончите обработку данных, вы заключите их в объект Oject (может быть, Hashtable или пользовательский компонент States), мы назовем его states
и внутренне вызовем notifyHandlers(states)
. Теперь, когда вы проходите через каждый EventHandler, вы звоните handler.handleEvent(states)
. Вы можете подумать о том, чтобы сделать попытку / перехватить каждый вызов, чтобы один EventHandler не препятствовал их запуску.
Итак, на EventHandlers. Это еще один интерфейс с абстрактным методом public void handleEvent(Object obj)
. Скажем, у вас есть экран, который после получения states
отобразит их в списке. Этот экран будет реализовывать EventHandler, а затем зарегистрировать себя в EventGenerator, используя generator.addEventHandler(this)
. Всякий раз, когда обработка завершается, вызывается этот метод, и вы можете делать все, что захотите, с возвращаемым объектом.
Добавление, которое вы можете реализовать, - это изменение public void handleEvent(Object obj)
на public boolean handleEvent(Object obj)
и, подобно методам навигации в BB, возвращать true, если событие было обработано, и ничто больше не должно пытаться его обработать.