我在Activity (BaseActivity)
和Fragment (BaseFragment)
上註冊了EventBus
。所以,我趕上與事件: 在BaseActivity
,並BaseFragment
我有相同的代碼:OnEvent使用EventBus投出不正確的事件對象
public void onEvent(Object object) {
// do nothing
}
在我的孩子從BaseFragment
fragment (A)
extended
,我有它XYZEvent
一個事件,我預計這種方法被稱爲:
public void onEvent(XYZEvent event) {
// my logic, not called :(
}
但它沒有。我已調試過,在onEvent中都調用了BaseActivity
和BaseFragment
。 於是,我改變了我的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
對象
我猜是事件是通過鑄造強制參數是一個對象(奇怪,但應該解釋這一點)。因此,在調用時,'onEvent((Object)event)將會接受來自BaseFragment的'onEvent(Object)'最接近的定義。這需要檢查 – AxelH
感謝您的迴應,但事件是'XYZEvent'爲什麼最接近'Object'在這裏?另外,如果我通過在'BaseActivity'和'BaseFragment'中註釋'onEvent(Object event)'來測試,我的'onEvent(XYZEvent event)'仍然沒有被觸發。唯一讓它調用的方法是'onEvent(Object event)'。 – NamNH
我沒有Environnement來搜索,但使用調試器來查找調用源,並檢查源代碼,您應該可以找到它。 [閱讀本文](http://stackoverflow.com/a/26844295/4391450),這可能會幫助你;) – AxelH