对于 BlackBerry,如果您计划从 UI 元素(ButtonField、ListField 等)生成这些事件,它们都带有 Field.setChangeListener(FieldChangeListener),因此您只需为其附加一个侦听器。如果您希望它能够响应 IO 或处理之类的事情,您可以使用 Event 和 EventListener 类来完成此操作。就我个人而言,我认为它们比我需要的简单通知多一点,所以我通常会制作自己的简单界面。
假设您有一个扩展 Thread 的类,该类连接到 Web 服务以下载列出州及其首都的 XML 文件。并对其进行处理。您可以创建一个带有抽象方法的接口 EventGeneratorpublic void addEventHandler(EventHandler)
和protected void notifyHandlers(Object obj)
. 在这里面你有一个 Vector ,它存储 EventHandlers,你notifyHandlers()
可以循环并发送调用到handler.handleEvent(Object)
. 处理完数据后,将其包装在 Oject 中(可能是 Hashtable 或自定义 States bean),我们将其称为states
,并在内部调用notifyHandlers(states)
. 现在,当您遍历每个 EventHandler 时,您调用handler.handleEvent(states)
. 您可以考虑在每次调用周围放置一个 try/catch,这样一个 EventHandler 就不会阻止所有调用。
所以到 EventHandlers 上。这是另一个具有抽象方法的接口public void handleEvent(Object obj)
。假设您有一个 Screen ,在states
检索到它们后,会将它们显示在列表中。此 Screen 将实现 EventHandler,然后使用generator.addEventHandler(this)
. 每当处理完成时,都会调用此方法,您可以对返回的 Object 做任何您想做的事情。
您可以实现的一个附加功能是更改public void handleEvent(Object obj)
为public boolean handleEvent(Object obj)
,与 BB 中的导航方法类似,如果事件已处理,则返回 true,并且不应尝试处理它。