2017-05-03 9 views
1

eventbusにイベントをポストするときに同じ引数を受け入れる2つのリスナーがありますが、同じ引数を受け入れるリスナーの動作が異なります。google guava eventbusで同じ引数を持つ複数のリスナーを処理する方法

public class EventListener1 { 



    @Subscribe 
    public void executeJob(jobVO jobVO) { 
     //logic goes here 
    } 
} 



public class EventListener2 { 



    @Subscribe 
    public void cancelJob(jobVO jobVO) { 
     //logic goes here but different 
    } 
} 

EventBus eventBus = new EventBus(); 
eventBus.register(new EventListener1()); 
eventBus.register(new EventListener2()); 

ユーザーの押しボタンを実行し、ジョブをキャンセルするために賢明なようEventListener1をトリガしたいと考えています。私の質問はどのようにeventbusにイベントを投稿するとき、私は特定のリスナーをトリガすることができますか、それは両方のリスナーを呼び出すこと

のための実行ジョブのジョブをキャンセル

JobVO j=new JobVO(); 
j.setAction("cancelJob"); 
etc... 
eventBus.post(j); 

ため

JobVO j=new JobVO(); 
j.setAction("executeJob"); 
etc... 
eventBus.post(j); 

ですか?

+0

あなたはいくつかの特定のサブクラスを使用することはできません'など? @RC。 –

+0

JobVOをクライアントサーバー通信として使用することはできません。ユーザー層からjobVOを作成し、server.iに渡すことはできません。これは、サブクラスを使用すると簡単にできることがわかります.iだけ知りたいのですが、サブクラスを使用しています。 – gihan

+1

1つのイベントリスナーとスイッチが動作します –

答えて

2

いくつかのシンプルなソリューション:

@Subscribe 
public void executeJob(jobVO jobVO) { 
    if (!jobVO.getAction().equals("executeJob")) { 
     return; 
    } 
    //logic goes here 
} 

...または、交互に、は使用しませんEventBus:クラスExecuteJobがJobVOを拡張 `よう

JobVO j=new JobVO(); 
j.setAction("executeJob"); 
etc... 
eventListenerForExecuting.executeJob(j); 
関連する問題