我在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