アクティビティ/場所と MVP を使用した最初の独自の例を完成させました。すべて正常に動作しますが、(別の場所から) 場所に戻ると、一部のイベントが適切に送受信されません。しかし、この場所がデフォルトの場所として設定されている「moduleLoad」では、すべて正常に動作します。場所/アクティビティが moduleLoad で開始された場合 (historyHandler = new PlaceHistoryHandler(historyMapper); historyHandler.register(placeController, eB, defaultPlace); historyHandler.handleCurrentHistory();) または placeController を介して開始されても、違いはないと思います。 goTo(場所); 、そうすべきですか?
デバッグを介して、イベント登録、イベント送信、イベント受信の順序を確認しました(すべてアクティビティの開始(...)で実行されます)。問題は、 start() が goTo(place) を介して実行された場合、すべてのレシーバーがイベントを受信しないことです (登録と送信は正常に機能します)。しかし、イベントが start() の後または start() 内で送信され、moduleLoad で実行された場合は、すべて正常に動作します。
私の活動の開始は次のようになります。
@Override
public final void start(final AcceptsOneWidget panel, final EventBus eventBus) {
// register events - to manipulate visibility of some display areas
eventBus.addHandler(SelectedEvent.TYPE, this);
//initiate presenters -(pseudo code)
[presenter that receives SelectedEvent]
[presenter that sends SelectedEvent]
//ading presenter's asWidgets to screen -> panel.setWidget..
...
}
@Override
public final void onSelected(final SelectedEvent event) {
//do something
}
(開始時にこのイベントを送信するユースケースは、何も選択されていないと言いたい - イベントのペイロードが null である)
問題は、goTo 経由で start() が呼び出された場合、プレゼンターの onSelected メソッドもアクティビティの onSelected メソッドも呼び出されないことです。ただし、すべての場合 (デバッガーで確認) で、イベントの登録は送信前に発生します。私は何をすべきか?