2016-11-29 29 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。