BlackBerry では、これらのイベントを UI 要素 (ButtonField、ListField など) から生成することを計画している場合、すべて Field.setChangeListener(FieldChangeListener) が付属しているため、それにリスナーをアタッチするだけで済みます。これを IO や処理などに応答するものにしたい場合は、Event および EventListener クラスを使用してこれを実現できます。個人的には、単純な通知に必要なものよりも少し多いと思うので、通常は独自の単純なインターフェイスを作成します。
Web サービスに接続して、州と州都のリストを含む XML ファイルをダウンロードする Thread を拡張するクラスがあるとします。そしてそれを処理します。public void addEventHandler(EventHandler)
抽象メソッドとを使用して、インターフェイス EventGenerator を作成できますprotected void notifyHandlers(Object obj)
。notifyHandlers()
この内部には、ループして呼び出しを送信できるEventHandler を格納する Vector がありますhandler.handleEvent(Object)
。データの処理が終了したら、それを Oject (おそらく Hashtable またはカスタム States Bean) にラップします。これstates
を と呼び、内部で を呼び出しますnotifyHandlers(states)
。各 EventHandler を通過するときに、 を呼び出しますhandler.handleEvent(states)
。各呼び出しの周りに try/catch を配置して、1 つの EventHandler がすべての実行を妨げないようにすることを検討してください。
そのため、EventHandlers について説明します。これは、抽象メソッドを持つ別のインターフェイスですpublic void handleEvent(Object obj)
。states
が取得された後、それらをリストに表示する画面があるとします。この Screen は EventHandler を実装し、 を使用してそれ自体を EventGenerator に登録しgenerator.addEventHandler(this)
ます。処理が完了するたびに、このメソッドが呼び出され、返されたオブジェクトで好きなことを行うことができます。
実装できる追加機能は、BB のナビゲーション メソッドと同様に、イベントが処理された場合に true を返すように変更public void handleEvent(Object obj)
することです。public boolean handleEvent(Object obj)