2016-11-29 32 views
0

我在Activity (BaseActivity)Fragment (BaseFragment)上註冊了EventBus。所以,我趕上與事件: 在BaseActivity,並BaseFragment我有相同的代碼:OnEvent使用EventBus投出不正確的事件對象

public void onEvent(Object object) { 
    // do nothing 
} 

在我的孩子從BaseFragmentfragment (A)extended,我有它XYZEvent一個事件,我預計這種方法被稱爲:

public void onEvent(XYZEvent event) { 
    // my logic, not called :(
} 

但它沒有。我已調試過,在onEvent中都調用了BaseActivityBaseFragment。 於是,我改變了我的fragment (A)象下面這樣:

public void onEvent(Object event) { 
    if(event instanceof XYZEvent) { 
     // my logic 
     // after changed this block code is called (~_~), why??? 
    } 
} 

這就是所謂的。 所以,我想知道當我沒有解僱onEvent(XYZEvent event)時我錯過了什麼?但onEvent(Object event)沒有。似乎返回的事件有錯誤的投射,我的XYZEvent被鑄造爲Object

P/S:我使用這個庫compile 'de.greenrobot:eventbus:2.4.0'和XYZEvent包含Serializable對象

+0

我猜是事件是通過鑄造強制參數是一個對象(奇怪,但應該解釋這一點)。因此,在調用時,'onEvent((Object)event)將會接受來自BaseFragment的'onEvent(Object)'最接近的定義。這需要檢查 – AxelH

+0

感謝您的迴應,但事件是'XYZEvent'爲什麼最接近'Object'在這裏?另外,如果我通過在'BaseActivity'和'BaseFragment'中註釋'onEvent(Object event)'來測試,我的'onEvent(XYZEvent event)'仍然沒有被觸發。唯一讓它調用的方法是'onEvent(Object event)'。 – NamNH

+0

我沒有Environnement來搜索,但使用調試器來查找調用源,並檢查源代碼,您應該可以找到它。 [閱讀本文](http://stackoverflow.com/a/26844295/4391450),這可能會幫助你;) – AxelH

回答

0

好吧,這是我的錯誤。我有一個服務onEvent方法,它已經竊取我的XYZEvent。